ofs | hex dump | ascii |
---|
0000 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 01 00 00 00 01 00 08 06 00 00 00 5c 72 a8 | .PNG........IHDR.............\r. |
0020 | 66 00 00 00 06 62 4b 47 44 00 ff 00 ff 00 ff a0 bd a7 93 00 00 00 09 70 48 59 73 00 00 0e c3 00 | f....bKGD..............pHYs..... |
0040 | 00 0e c3 01 c7 6f a8 64 00 00 00 07 74 49 4d 45 07 e0 06 09 13 17 1c 27 3a ce f8 00 00 20 00 49 | .....o.d....tIME.......':......I |
0060 | 44 41 54 78 da ec bd 79 b0 75 d9 55 1f f6 5b 6b ef 7d 86 7b df fc 0d ad 6e b5 d4 b2 86 d6 d0 20 | DATx...y.u.U..[k.}.{....n....... |
0080 | 09 21 09 0c b4 15 14 01 0e 65 1b 22 84 84 04 84 a4 42 62 8c 84 22 0a 4c a8 10 8a 82 d8 71 2a 41 | .!.......e.".....Bb..".L.....q*A |
00a0 | 46 60 40 55 c4 11 06 63 03 45 51 31 f9 23 71 06 8b 2a 92 18 52 19 84 a0 24 31 58 a2 d0 d8 fd 8d | F`@U...c.EQ1.#q..*..R...$1X..... |
00c0 | ef bd 3b 9c 61 0f 2b 7f ec bd cf 3d f7 7e af 65 b5 d4 fd 19 f5 77 7e 5d b7 be d7 ef dd f7 de 7d | ..;.a.+....=.~.e.....w~].......} |
00e0 | f7 9c b5 f6 5a bf f5 5b 6b 01 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 | ....Z..[k..&L.0a....&L.0a....&L. |
0100 | 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 | 0a....&L.0a....&L.0a....&L.0a... |
0120 | 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 | .&L.0a....&L.0a....&L.0a....&L.0 |
0140 | 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 | a....&L.0a....&L.0a....&L.0a.... |
0160 | 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 | &L.0a....&L.0a....&L.0a....&L.0a |
0180 | c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 | ....&L.0a....&L.0a....&L.0a....& |
01a0 | 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 | L.0a....&L.0a....&L.0a....&L.0a. |
01c0 | 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c | ...&L.0a....&L.0a....&L.0a....&L |
01e0 | 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 09 13 26 4c 98 30 61 c2 84 | .0a....&L.0a....&L.0a....&L.0a.. |
0200 | 09 13 26 4c 98 30 61 c2 17 0e ba 17 fe c8 bf fc 95 5f 71 dc db fe f7 da b6 7d d8 5a 87 f9 7c 0f | ..&L.0a.........._q......}.Z..|. |
0220 | f3 f9 1c f3 f9 1c cf 7b de f3 70 f9 f2 65 88 08 16 8b 05 da b6 85 88 80 88 40 44 30 c6 60 36 9b | .......{..p..e...........@D0.`6. |
0240 | 81 99 71 7e 7e 8e 3f ff f3 3f c7 f9 f9 39 ce cf cf 71 eb d6 2d cc e7 73 54 75 f9 3f 13 e8 2d bf | ..q~~.?..?...9...q..-..sTu.?..-. |
0260 | ff fb 1f 3c 9b 6e a9 bb 83 d7 be f6 35 87 22 f2 eb eb 75 f3 0d 8b c5 02 c7 c7 c7 38 38 38 c0 de | ...<.n......5."...u........888.. |
0280 | de 1e 1e 7c f0 41 ec ef ef 03 00 ba ae 83 73 0e cc 0c ad 35 98 19 4a 29 14 45 01 11 c1 d9 d9 19 | ...|.A........s....5..J).E...... |
02a0 | 3e f1 89 4f a0 69 1a ac d7 6b 2c 97 2b 88 38 40 e4 7d 00 de f1 a1 0f ff 51 f3 4c 7e 1f f5 bd 70 | >..O.i...k,.+.8@.}......Q.L~...p |
02c0 | b3 78 6f 29 04 0f 11 81 88 44 cf 97 0c 3c ff 3f 80 e1 eb e3 e7 8c 3f 3f 78 cd f4 bd d9 85 12 13 | .xo).....D...<.?......??x....... |
02e0 | 08 3c 59 e5 dd bc a6 ce 21 88 c0 7b 8f 10 02 42 08 5b 1f 67 27 ae 94 02 33 df 71 3d bd 8f f7 83 | .<Y.....!..{...B.[.g'...3.q=.... |
0300 | 73 6e b8 b6 f1 7b 80 aa a8 c0 3c ba c6 93 03 f8 e2 46 59 55 be 22 75 5a 96 1d 6e dd 3a 05 00 30 | sn...{....<......FYU."uZ..n.:..0 |
0320 | f3 85 0e e0 89 b0 eb 04 b6 e3 27 9a 2c f2 2e c3 5a 07 41 34 e0 6c f0 63 e3 cf 06 af 94 42 08 61 | ..........'.,...Z.A4.l.c.....B.a |
0340 | eb fa e6 68 80 88 50 96 25 8c 31 e8 fb 7e 70 ec 55 55 41 69 65 ee 85 ab 7a 8f 44 00 5e 99 42 df | ...h..P.%.1..~p.UUAie...z.D.^.B. |
0360 | c7 4a 43 44 c0 cc c3 43 44 d0 b6 ed 70 f1 b5 be f3 2d 09 21 80 99 e1 bd 87 73 0e ce 39 78 ef 41 | .JCD...CD...p....-.!.....s..9x.A |
0380 | e9 3f 26 2e f3 29 33 e1 ee c0 79 3f 5c 9b 8c 6c d8 b3 d9 0c f3 f9 1c 00 d0 b6 ed f0 9c ec f4 95 | .?&..)3...y?\..l................ |
03a0 | 52 30 c6 0c d7 3b 47 09 43 84 40 00 2b 7e 10 41 68 72 00 cf 00 84 20 e2 7d e8 76 43 fc 8b 42 fe | R0...;G.C.@.+~.Ahr......}.vC..B. |
03c0 | dd b0 2f 47 09 bb e1 65 7c 00 21 78 84 e0 ef 67 26 35 99 e5 dd 03 33 91 04 b9 42 d8 5c bb 71 54 | ../G...e|.!x...g&5....3...B.\.qT |
03e0 | 37 be c6 9b f0 9e b6 ae eb 6e 4a 97 3f e7 9d 83 05 8e 88 88 27 07 f0 0c c0 7c 6f df 8a c8 e9 7a | 7........nJ.?.......'....|o....z |
0400 | b5 1e 42 c5 9c 03 e6 0b 3f 3e c1 77 39 80 fc b5 f1 29 11 6f b4 00 ef 03 9c ed c4 3b 17 26 b3 bc | ..B.....?>.w9....).o.......;.&.. |
0420 | 8b 4e dd 3b 0b a1 86 12 a9 a7 94 da ca f1 f3 a9 9f a3 b6 f1 b5 1c 7f 3d 3b f5 b1 63 b7 d6 82 15 | .N.;...................=;..c.... |
0440 | ad 0b 5d 84 c9 01 3c 03 40 00 04 b8 0f 90 e1 34 cf 27 fa 6e d8 3f be 39 f2 cd 32 76 12 63 52 29 | ..]...<.@......4.'.n.?.9..2v.cR) |
0460 | df 30 21 e0 01 c5 a8 26 b3 bc ab 57 b5 20 a6 47 c6 a7 77 7e 8c 1d 7c 4e d9 72 45 67 73 cd c2 1d | .0!....&...W...G..w~..|N.rEgs... |
0480 | cf cd 0f e7 1c b4 53 f7 7b 15 f4 e4 00 9e 11 f7 0a 79 12 69 c6 39 7d be f0 17 11 45 bb e1 e3 38 | ......S.{........y.i.9}....E...8 |
04a0 | bc dc 4d 13 d2 87 3d 48 a6 08 e0 ee 5e d4 c0 4c e7 8a d5 d1 6e da 36 26 04 33 5f 93 9d f9 6e ea | ..M...=H....^..L....n.6&.3_...n. |
04c0 | b7 9b 06 02 80 75 0e d4 f3 19 11 4d 11 c0 33 22 5c 8c 17 f7 c6 6e 4e b8 9b eb ef 1a fd 2e 37 30 | .....u.....M..3"\....nN.......70 |
04e0 | 36 fe ec 14 98 15 98 d9 07 4c 0e e0 ae 9a 3f 13 14 eb 45 d0 74 e1 35 fc 6c 15 9d b1 a3 b8 93 17 | 6........L....?...E.t.5.l....... |
0500 | 4a 9f 0f fe a6 f7 cf fc b4 ee 9e a1 ae 45 e4 f1 8b 8c 79 d7 b0 2f 3a 11 9e 48 07 30 22 96 4e 83 | J............E....y../:..H.0".N. |
0520 | 17 3f 99 e5 dd 4c eb 08 ce bb c7 73 f8 7e 51 2e 0f 60 e0 07 b6 58 fe 27 28 19 e6 88 2e 95 08 af | .?...L.....s.~Q..`...X.'(....... |
0540 | 39 e7 e5 99 fe 3e de 33 1c 00 11 9d c5 12 e0 76 08 ff d9 c2 c1 8b 4e 94 dd 93 25 48 80 0f e1 d3 | 9....>.3.......v......N...%H.... |
0560 | 84 a7 2f 5c 7c c7 3b de 41 45 51 90 52 0a de 7b 5a ad 56 e1 b1 c7 1e c3 6f fd d6 6f c9 bd ea 00 | ../\|.;.AEQ.R..{Z.V.....o..o.... |
0580 | b4 52 10 12 eb 9c df ba 96 bb 0e 3a 73 3d e3 14 60 fc 9c b1 63 c8 88 1c 11 da 7b e2 7d bc 57 1c | .R.........:s=..`...c.....{.}.W. |
05a0 | 80 a4 8b ee fd 9d a7 c4 f8 a6 18 13 7f 43 98 94 34 03 e3 d4 60 20 07 41 d0 4a f7 4f d7 6b 7f fb | .............C..4...`..A.J.O.k.. |
05c0 | db df 4e 45 51 80 99 61 ad d5 eb f5 1a 37 6e dc a0 c5 62 71 4f 47 1c a6 2a 41 22 70 2e 5c 48 d0 | ..NEQ..a.....7n...bqOG..*A"p.\H. |
05e0 | 5e 14 ea 5f 14 c1 5d 94 02 64 a7 31 39 80 67 08 bc 0f 00 b6 c5 20 17 85 ff bb 37 cb e7 22 05 66 | ^.._..]..d.19.g...........7..".f |
0600 | 66 b0 62 d0 d3 a4 06 fc b9 9f fb 39 01 80 77 bd eb 5d 68 db d6 dd ba 75 8b ce ce ce e4 fd ef 7f | f.b........9..w..]h....u........ |
0620 | bf dc cb 0e 20 3b f5 dd 90 fe a2 14 20 8b bf 76 53 80 8b d2 bd a1 2a 24 32 39 80 67 8e 03 e8 07 | .....;.........vS.....*$29.g.... |
0640 | d1 8e 52 bc e5 04 9e 88 14 fa 5c 1d c0 dd ea 05 78 cf 7b de 23 a3 7b fe 9e c7 53 d5 0b 90 ff dd | ..R.......\.....x.{.#.{...S..... |
0660 | 44 7b 84 42 4f bd 00 cf 28 f4 7d 87 10 30 d4 83 2f 3a f9 2f ca ef 3f 5b 18 39 1c 43 db 1f 4c b8 | D{.BO...(.}..0../:./..?[.9.C..L. |
0680 | 4b 78 32 bd 00 17 71 3c e3 ef d9 4d 03 cb b2 84 36 1a 53 2f c0 33 04 6d d3 42 40 43 e7 d7 2e f1 | Kx2...q<...M....6.S/.3.m.B@C.... |
06a0 | 93 6f 82 27 92 8a 8e ff 7f eb 39 20 28 56 50 ac ee 89 d3 e2 2f 12 72 2f 40 36 f6 b1 8e e3 22 61 | .o.'......9.(VP...../.r/@6...."a |
06c0 | d0 f8 b9 17 85 fe 5b 5f 27 80 98 41 f7 40 1a 70 4f 38 00 66 66 e7 7d fd 44 ed c0 de 6f f8 b4 7c | ......[_'..A.@.pO8.ff.}.D...o..| |
06e0 | 62 8c 9f 93 65 a6 77 30 c6 34 38 84 52 44 cc 64 96 77 91 03 20 28 80 8a 5d a3 cf 65 bf ac ee cc | b...e.w0.48.RD.d.w...(..]..e.... |
0700 | 42 a0 5d 83 57 4a dd 91 ce c5 88 c0 23 f8 80 e0 7d 39 f5 02 3c 43 70 e9 f2 95 19 04 5f b6 6a 1a | B.].WJ......#...}9..<Cp....._.j. |
0720 | dc b8 7e 63 e8 1a cb 0a c0 ac 08 dc ed 09 d8 84 9b 36 a5 12 3d fa be 1f 6e 2a 08 e0 9c 85 ed e9 | ..~c.............6..=...n*...... |
0740 | 55 24 74 8c 24 36 9a f0 f4 43 82 0f 22 30 32 92 6d 8f 87 7d 14 45 31 44 06 bb 0e dd 18 83 aa aa | U$t.$6...C.."02.m..}.E1D........ |
0760 | 86 e8 a0 2c 4b 58 6b 93 a3 67 14 65 81 b2 2a f7 20 28 01 ac 26 07 f0 c5 7e b3 08 82 00 cb 30 ca | ...,KXk..g.e..*..(..&...~.....0. |
0780 | fd 3e 5b 28 78 51 fe bf 39 21 b6 bb 01 e3 d7 e4 1c 34 09 81 ee 72 5c 27 44 61 45 84 0b 49 be 2f | .>[(xQ..9!.......4...r\'DaE..I./ |
07a0 | a4 1b b0 ef 3a 48 f0 e7 44 b0 53 04 f0 0c 40 c8 06 1e 36 cd 40 99 0f b8 28 b4 ff 6c dd 80 db 7a | ....:H..D.S...@...6.@...(..l...z |
07c0 | 80 30 34 16 7d be d9 e2 3b df f9 4e 2a 8a 02 3f f9 93 3f 39 31 fc 4f 26 05 60 02 02 83 46 27 ff | .04.}...;..N*..?..?91.O&.`...F'. |
07e0 | 2e cb 9f 53 00 6b ed 67 ed 06 cc d5 83 ec 38 fa be 87 f7 ce 8b c0 4f 0e e0 99 70 b3 6c 4c 7b e8 | ...S.k.g......8.......O...p.lL{. |
0800 | f6 ca 4e 80 99 87 2e b1 7c 43 84 9d b0 72 3c 48 22 3f 36 11 81 c0 fb f0 79 95 01 7f e0 07 7e 80 | ..N.....|C...r<H"?6.....y.....~. |
0820 | 8a a2 30 cc 5c fd e0 0f fe e0 ec d6 ad 5b ed f5 eb d7 57 ab d5 4a da b6 95 d5 6a 15 ce cf 17 b0 | ..0.\........[....W..J....j..... |
0840 | 7d 87 4f 7e ea 53 93 83 18 41 11 43 b4 40 79 be 43 db 91 af 6d 08 61 48 d9 2e ea 16 cc cf bd d3 | }.O~.S...A.C.@y.C...m.aH........ |
0860 | 01 58 10 21 e0 1e 28 bb ea 7b ed c6 19 1b fa ee 49 bf 7b fa 3f 51 37 e0 f8 73 5a 6b 18 53 3c e9 | .X.!..(..{......I.{.?Q7..sZk.S<. |
0880 | d7 f1 43 3f f4 43 5a 29 35 23 a2 07 9d 73 2f 6e db f6 4f de f7 be f7 7d e8 a2 e7 3e 70 ff 7d f4 | ..C?.CZ)5#...s/n..O....}...>p.}. |
08a0 | e0 fd 97 e9 93 9f b9 31 39 81 84 72 56 83 62 2b 36 d0 f5 9f 35 05 d8 0d ff 87 c8 f0 02 31 90 24 | .......19..rV.b+6...5........1.$ |
08c0 | 5e 67 52 02 3e 83 10 c3 c1 78 91 c7 8d 21 4f 89 12 50 31 94 56 4f 4a 09 f8 c3 3f fc c3 ac 94 32 | ^gR.>....x...!O..P1.VOJ...?....2 |
08e0 | 00 0e ac b5 cf 6f 9a e6 cf 7e f6 67 7f f6 43 4f f4 fc 4f 7f e6 f1 c9 f0 2f 24 76 64 6b c0 cb ee | .....o...~.g..CO..O...../$vdk... |
0900 | 69 0e 0c 8d 3d 77 b0 fd e3 26 a2 5d 21 50 59 14 f7 8c b2 e3 19 e7 00 fe c1 4f bf 8b da 36 e0 6f | i...=w...&.]!PY..........O...6.o |
0920 | ff a7 3f 33 5c d5 ae 6b 06 cf 9e 95 80 e3 7c fe a2 13 61 d7 01 5c c4 26 0f 77 09 11 9e 8c 18 48 | ..?3\..k......|...a..\.&.w.....H |
0940 | 6b 2d 44 64 ad b5 a7 8b c5 e2 ff 7d ef 7b df fb 99 c9 a2 9f 1c fa ae 87 20 4e ef c9 46 9f 53 bb | k-Dd.......}.{...........N..F.S. |
0960 | 7c ad 72 84 a6 b5 be 43 04 94 39 a0 f1 54 e0 9c f6 cd eb 19 b4 56 93 12 f0 8b 0d 3f f8 dd ff ae | |.r....C..9..T.......V.....?.... |
0980 | f9 b3 0f fe d9 8f 76 ed ea 23 df fd 4d af fe bf 4e f6 cd a7 ae 5c 9a f7 ff f8 b7 3f 03 22 82 73 | ......v..#..M...N....\.....?.".s |
09a0 | fe 29 17 02 31 f1 93 16 02 31 33 9c 73 fe e6 cd 9b ab eb d7 af 37 93 39 3f 79 58 e7 b6 ae dd 13 | .)..1....13.s........7.9?yX..... |
09c0 | 09 81 f2 30 d7 71 7a f7 af 13 02 81 09 ac f5 24 04 fa 62 c3 e2 ec e6 43 4a 99 1f 6d 9a d5 b2 54 | ...0.qz........$..b....CJ..m...T |
09e0 | f8 c0 de bc fc 17 cc fc fe 87 1f 98 7d f2 8f 3f b5 1a 48 bb 31 c1 97 4f 83 d1 e9 7c 61 73 c8 2e | ............}..?..H.1..O...|as.. |
0a00 | d3 9c d9 c5 51 24 f1 39 7b 80 9f f8 89 9f 18 df 59 53 f9 f0 f3 80 52 8a 40 04 ea fb 61 bc 57 be | ....Q$.9{.......YS....R.@...a.W. |
0a20 | 56 c6 98 41 07 d0 34 0d ac dd ce e9 b3 06 64 57 fb 11 23 02 0b 67 0d 78 1c e1 4d 0e e0 8b 03 ed | V..A..4.......dW..#..g.x..M..... |
0a40 | 7a fd f7 fb be 45 b7 3a df bb 7a 65 ef 6b 14 ea d7 86 10 be f3 91 e7 ee fd c1 e3 b7 ed 95 db cb | z....E.:..ze.k.................. |
0a60 | 6e b8 59 72 14 30 ae 06 64 23 1f 97 91 32 fb 9f 43 c9 dd 08 20 ff 2b 60 37 99 e5 5d bc 71 cb ca | n.Yr.0..d#...2..C.....+`7..].q.. |
0a80 | 43 42 60 a5 b6 22 2b 66 1e 84 40 99 1b c8 69 c2 38 82 2b cb 72 eb 3e c8 4e c0 5a 0f e7 2c 98 29 | CB`.."+f..@...i.8.+.r.>.N.Z..,.) |
0aa0 | b8 20 53 15 e0 2f 2a be e1 1b be 5e 39 67 67 37 6f dd 04 a3 0b 0f 5f aa 8f 14 f8 af 77 ab 15 fa | ..S../*....^9gg7o....._.....w... |
0ac0 | 66 09 f4 44 eb 05 95 ce ce 5e e0 3c bf e0 64 4f 87 f3 d6 03 e8 10 2e 08 fd 2e 12 03 5d 44 fe 8d | f..D.....^.<..dO............]D.. |
0ae0 | 39 80 5c 29 70 ce 09 2b c5 7f fd d1 47 e6 d6 07 b6 de 41 91 42 51 18 14 05 03 24 70 b6 87 04 0f | 9.\)p..+....G.....A.BQ....$p.... |
0b00 | a5 34 ea 6a 86 ba ae 51 18 93 07 8a 60 dd 38 3e 5b 36 fa ec 7c 31 23 e9 f6 6b 0d ae 0b b5 ae 0a | .4.j...Q....`.8>[6..|1#..k...... |
0b20 | b3 2e 66 f3 b5 32 33 57 d7 b5 1c 1d 96 e0 10 70 7a 7a a6 6e 9e 9d 2b 4f 1a ac aa 70 b6 ec b1 6e | ..f..23W.......pzz.n..+O...p...n |
0b40 | 3a 68 c5 38 38 dc 83 66 a4 96 56 41 51 14 d0 46 43 29 86 22 40 c0 08 12 40 92 f8 0b 22 30 03 9a | :h.88..f..VAQ..FC)."@...@..."0.. |
0b60 | 09 26 b5 36 8b 77 08 02 10 6b 78 07 b8 38 fe 1c 5e 04 7d db a1 eb 1a 68 56 28 ca 0a c6 18 04 f1 | .&.6.w...kx..8..^.}....hV(...... |
0b80 | f0 21 00 24 20 00 c1 39 10 02 aa a2 84 d6 1a 41 c4 af da de 79 10 ac 8f cd 3c 4d d3 41 91 43 55 | .!.$...9.......A....y....<M.A.CU |
0ba0 | 18 30 2b 18 a3 e2 a0 0f 00 67 67 a7 38 3f 3d 83 28 05 a3 6b 30 1b 88 0f 20 12 14 0c b9 ee 00 ef | .0+......gg.8?=.(..k0........... |
0bc0 | bd 60 87 c4 1b 9f ea 4f 14 ea 5f 74 1d 87 14 80 04 22 04 11 09 7b 05 d1 b7 7c fd cb cd 7a dd 53 | .`.....O.._t....."...{...|...z.S |
0be0 | dc 1d 11 d0 75 2d 6c ef 61 8c c1 7d 57 2e e3 ea d5 67 e1 f8 d2 65 28 65 ec df f9 99 7f 2c 93 03 | ....u-l.a..}W....g...e(e.....,.. |
0c00 | b8 7b 78 3e 11 fd 23 88 34 46 91 74 12 5e 28 5d 07 36 25 e6 e5 15 f4 ca e0 76 43 50 5d 0b 90 86 | .{x>..#.4F.t.^(].6%......vCP]... |
0c20 | f5 81 b3 20 84 20 17 cc f8 97 3b 74 e3 e3 0e b3 f1 14 e1 81 43 20 42 d3 34 a0 60 af 9e cc e8 17 | ..........;t........C.B.4.`..... |
0c40 | 5d 30 2d 88 0c 62 3f 09 00 81 10 e5 89 44 9b fe f5 f4 91 20 a6 99 0c d0 bc d6 a8 cb 3d 7d 38 37 | ]0-..b?......D..............=}87 |
0c60 | 57 6d df 3d a4 18 95 56 74 4a cc 9f 60 53 de 60 a5 5b 56 e4 18 04 22 b0 32 ba 20 65 94 22 45 00 | Wm.=...VtJ..`S.`.[V...".2..e."E. |
0c80 | c2 56 c9 5a 04 71 da db a8 83 38 fd 32 22 06 44 40 32 ee a8 4f 5f 4f 64 66 fa 81 9b af d3 f0 7a | .V.Z.q....8.2".D@2..O_Odf......z |
0ca0 | 41 22 e9 f5 e7 e8 07 9b af 51 fa 0e a2 f8 3d 92 bf 22 4a 80 8f 82 f8 4c 42 a0 e1 3b 49 36 cf cd | A".......Q....=.."J....LB..;I6.. |
0cc0 | cf 17 82 f0 88 93 91 f8 7e 11 49 ee bd a0 5e c4 55 72 5a 3c 7e de 3d b2 5c f7 77 74 03 ee f2 2d | ........~.I...^.UrZ<~.=.\.wt...- |
0ce0 | e3 53 3e eb 3e f2 62 90 71 5a c7 ac a0 59 c1 39 8b da 84 af 3e ac f5 7f 11 02 41 48 14 91 c4 17 | .S>.>.b.qZ...Y.9....>.....AH.... |
0d00 | 38 5c 59 8a 0e 92 00 40 4a 90 fc 3d 00 9f 9c 1c c0 5d 42 d7 b5 fb ce b9 af 6a db 06 50 16 eb d6 | 8\Y....@J..=.....]B......j..P... |
0d20 | c3 eb 38 a4 53 94 c2 d2 2a 38 00 46 11 6c 00 d6 6d 0f 6f 7b 10 71 bc 78 3b 03 24 c6 53 64 77 b5 | ..8.S...*8.F.l..m.o{.q.x;.$.Sdw. |
0d40 | 00 e3 11 d2 e3 1b 8b 00 f4 5d 0b 2d 54 3a 6d 5e d7 92 03 41 e0 bc 87 27 82 88 01 91 8a 46 10 42 | .........].-T:m^...A...'.....F.B |
0d60 | bc 59 04 90 10 e0 6c 07 16 0f 66 89 a7 b2 00 81 80 79 c9 08 45 0d 66 82 0f e1 c8 59 77 14 d2 6b | .Y....l...f......y..E.f....Yw..k |
0d80 | b2 9d 47 5f 00 24 0e c1 59 40 e2 28 52 0f 41 f0 0e 08 1e a0 10 4f ef 64 c6 04 c0 7b 0b 42 00 02 | ..G_.$..Y@.(R.A......O.d...{.B.. |
0da0 | c1 27 8b f5 21 9b 79 3e 31 01 78 86 a8 38 e5 28 fe 6c 01 c8 c3 f9 34 26 2b 84 28 7c 72 16 c1 5b | .'..!.y>1.x..8.(.l....4&+.(|r..[ |
0dc0 | 78 61 38 4b b1 81 46 3c 44 42 74 0e 04 88 f7 60 08 1c 03 12 3c 7c 90 d7 d9 de c2 07 81 0b 80 b5 | xa8K..F<DBt....`....<|.......... |
0de0 | 01 c1 5a 10 0b 3c 09 84 3d 28 04 48 70 10 12 04 67 11 42 2c df 7a 74 f0 d6 43 42 fc 7b 40 40 ef | ..Z..<..=(.Hp...g.B,.zt..CB.{@@. |
0e00 | 03 9a f5 92 96 ab 5e 8a a2 a2 b1 33 1f 5f a7 71 78 9f b9 1c 63 cc d0 2c 34 ae 04 31 13 58 29 04 | ......^....3._.qx...c..,4..1.X). |
0e20 | 6f 25 04 ff 88 ed fd cb 08 0e be ef e1 5c 7c 0f 43 70 90 e0 21 c1 c1 bb 0e 7d b7 86 ed e6 24 de | o%...........\|.Cp..!....}....$. |
0e40 | fd 77 93 03 b8 8b b8 7d fb 16 ac b5 b8 fe f8 63 98 e9 1e 75 a8 51 19 86 52 1a ac 34 34 2b 60 5e | .w.....}.......c...u.Q..R..44+`^ |
0e60 | 80 ab 02 de 03 c1 fa 21 5f 27 6c 14 7f e3 70 f1 22 46 78 fc bc 8b 84 43 10 81 eb 7b ac 16 4b 74 | .......!_'l...p."Fx....C...{..Kt |
0e80 | 2b 01 41 40 ac 50 d6 15 8a 82 11 ef 61 8f d2 68 54 65 85 59 55 a1 30 a9 bb 10 40 69 08 a5 d1 50 | +.A@.P......a..hTe.YU.0...@i...P |
0ea0 | 0a e8 ad c7 aa 75 68 6c 80 77 0e 9a 19 b3 9a e3 81 4e 0e c6 00 d2 2f e1 45 00 71 38 ac 0c 5c 08 | .....uhl.w.......N..../.E.q8..\. |
0ec0 | 70 de a3 da 23 c8 bc 80 62 02 b3 43 e7 3c ac 0f 10 00 3e 74 b1 1d 9a f2 df 14 9b 23 f2 d9 4d e9 | p...#...b..C.<....>t.......#..M. |
0ee0 | f4 37 9a a1 35 45 02 0c 04 26 20 08 60 5d 80 73 82 20 01 ce c5 94 05 12 20 44 f0 7d 13 8d 74 5c | .7..5E...&..`].s.........D.}..t\ |
0f00 | 26 4d 36 a5 98 20 96 41 4c 70 2e 50 d3 79 78 09 f0 01 70 3e d6 f1 c1 04 2f 8c 40 d1 39 51 0a 60 | &M6....ALp.P.yx...p>..../.@.9Q.` |
0f20 | 7c d7 43 c1 c1 fb 80 ae f1 e8 5d 2a ed a5 e7 58 0f b8 3e 80 c0 b4 cb fc e7 eb 36 fe fc ee 75 bd | |.C.......]*...X..>.......6...u. |
0f40 | e8 73 32 44 6a 44 be eb d1 84 96 18 1e ce 5b 38 eb 36 24 b2 08 c4 05 b4 cb 53 2c 75 40 c1 01 4a | .s2DjD........[8.6$......S,u@..J |
0f60 | 7f 71 9a d2 17 ad 03 30 4a 3c 79 8f 52 05 ec 97 84 cb fb 06 b3 42 27 07 10 c5 3e 85 51 50 31 19 | .q.....0J<y.R........B'...>.QP1. |
0f80 | c6 40 d4 d3 c5 f5 fe 8b a6 02 ef 9e 28 bb e1 a5 48 0c 86 b5 26 ec d5 0a 46 05 88 10 6c 60 54 05 | .@..........(...H...&...F...l`T. |
0fa0 | 43 b1 47 a9 18 47 f3 1a 47 fb 35 66 65 01 ad 19 44 0c 12 80 19 28 34 a1 30 0a 5a 33 7c 08 68 5a | C.G..G..G.5fe...D....(4.0.Z3|.hZ |
0fc0 | 8d c6 3a 30 95 98 95 06 c6 a8 78 d3 73 34 a4 1c 73 07 2f e8 9d 47 b0 49 e9 26 f1 04 03 00 09 82 | ..:0......x.s4..s./..G.I.&...... |
0fe0 | de 7b 2c fb e8 08 64 88 c6 a3 d1 05 1f e0 42 7c ed 8a e2 23 1b 2c 33 92 91 51 22 37 81 de 05 f8 | .{,...d.......B|...#.,3..Q"7.... |
1000 | 90 ea e7 3e 3a 82 1c e9 4b 8a 68 6c 9a d0 b3 79 3f 13 81 ca d1 e1 4a a1 30 9f e9 98 6a e4 ff 92 | ...>:...K.hl...y?.....J.0...j... |
1020 | d3 31 3a 3e 3f 48 72 4e 21 a0 ef 35 fa ce c0 7a 8f f5 ba 45 db c7 a9 4e 5a 31 98 81 b6 17 2c ad | .1:>?HrN!..5...z...E...NZ1....,. |
1040 | c3 da 6d ab 32 73 65 27 a7 72 99 d8 0d 21 c0 5a 3b 5c f3 ba ae ef 68 09 df 74 16 12 aa 52 e1 78 | ..m.2se'.r...!.Z;\....h..t...R.x |
1060 | 5e a0 50 01 10 03 11 1f a3 ad 10 10 02 a0 14 e1 70 5e 62 af 36 20 6a 40 81 26 07 70 37 71 18 d6 | ^.P.............p^b.6.j@.&.p7q.. |
1080 | 5f d1 14 05 66 85 c2 c1 4c e1 e4 a0 c6 ac 54 30 ca 80 c0 10 26 10 2b 78 30 3c 00 66 01 73 24 78 | _...f...L.....T0....&.+x0<.f.s$x |
10a0 | 2e ca 11 2f 3a fd f3 c7 e3 08 e0 8e 07 04 5a 33 f6 e7 0a 86 03 96 6b 8b 79 01 5c 39 28 70 b8 3f | .../:.........Z3......k.y.\9(p.? |
10c0 | c3 f1 e1 1c 47 7b 33 54 a5 46 61 34 b4 51 d1 88 83 40 12 61 16 8d 48 a0 a1 50 55 06 47 88 ce 81 | ....G{3T.Fa4.Q...@.a..H..PU.G... |
10e0 | 88 86 5c 3d e4 70 95 00 06 41 84 50 b9 80 60 02 02 04 e2 b3 dc 35 e6 fd b3 a0 b0 3f 2b d0 23 9e | ..\=.p...A.P..`......5.....?+.#. |
1100 | f6 61 d8 65 18 53 14 e7 63 88 af 99 a1 79 58 70 12 23 02 ca f3 e2 29 0a a8 42 76 00 71 be a2 1f | .a.e.S..c....yXp.#....)..Bv.q... |
1120 | 78 80 f8 db 82 0f b0 d6 c5 28 20 bd f6 34 8b 39 b9 90 e8 08 94 52 20 06 34 33 0a 66 30 11 b4 66 | x........(...4.9.....R..43.f0..f |
1140 | 68 13 9d 84 0b 02 ef 63 6f 45 d7 75 68 bb 1e d6 39 ac 0a c2 ba 8b dc 85 31 0a 44 c0 aa 15 3c b6 | h......coE.uh...9.......1.D...<. |
1160 | 68 c1 8d 8f 3f 7f d4 a7 31 76 da e3 c5 2f 39 bd cb a5 de 31 51 88 11 63 a2 98 50 95 1a c7 fb 0a | h...?...1v.../9....1Q..c..P..... |
1180 | 75 01 28 48 bc 02 22 b0 ce c3 7b 81 62 c6 c9 41 8d 79 5d a2 0f 39 d9 9a 1c c0 d3 8e 5f f9 a5 b7 | u.(H.."...{.b..A.y]..9......_... |
11a0 | d0 6f fe cc ff fd 1d 6b db ff 5d 56 05 4a 45 50 e9 86 55 44 d0 0a 60 a5 61 9d c0 07 81 d0 d0 b2 | .o.....k..]V.JEP..UD..`.a....... |
11c0 | 3b 9a f3 48 17 b2 c1 63 b2 e8 a2 a5 20 e3 d0 72 70 14 92 7e 37 13 14 33 ae 5e 9a e3 ea c9 01 ee | ;..H...c.......rp..~7..3.^...... |
11e0 | 3b 39 c4 fe bc 8a 8a 32 8e 3f b3 2c 93 03 60 8c 6a cf 80 b7 01 c1 c7 dc 59 29 02 78 24 53 86 20 | ;9.....2.?.,..`.j.......Y).x$S.. |
1200 | 78 81 ed 1c c4 47 63 f6 c1 27 f1 21 81 35 81 f3 0d 48 02 56 0a da 50 ca d5 03 e0 03 6c 00 38 75 | x....Gc..'.!.5...H.V..P.....l.8u |
1220 | 42 0a 03 04 15 df 01 8e ef 99 a2 91 03 a0 0d 69 38 38 49 62 80 03 38 55 10 10 02 62 b2 93 9f bb | B..............i88Ib..8U...b.... |
1240 | ed 44 89 29 fd bc cd ac 7d a5 18 45 52 d7 19 66 18 ce 03 3c a2 73 48 ee 06 0c 01 83 e0 95 82 66 | .D.)....}..ER..f...<.sH........f |
1260 | 06 14 43 6b 86 71 84 20 29 42 01 41 b1 0c 51 46 fc f7 ce 66 ac dd 65 2f 39 3a d8 5d 20 ba 45 84 | ..Ck.q..)B.A..QF...f..e/9:.]..E. |
1280 | 66 9d 01 33 0a 0d 14 1a 80 44 ee 43 10 9d a0 75 01 a2 e2 c5 2b 0b 83 ba 9c 81 58 4d 0e e0 6e e0 | f..3.....D.C...u....+.....XM..n. |
12a0 | 9f bf ef 8f ff bd b2 aa de d3 db fe a8 ee 17 98 1d 1a 1c cc 15 0a 1d 49 39 ef 2c 6c ef e0 d8 c0 | .......................I9.,l.... |
12c0 | 05 86 a4 7c d1 bb 10 c9 aa 14 e2 e5 ba fe b8 be 9f bb 02 2f 12 8d 64 e7 10 42 cc cf ed 20 3b f5 | ...|.............../..d..B....;. |
12e0 | 80 30 14 13 ca 82 70 b4 57 e3 ea f1 1e 2e 1d d5 30 5a 23 10 25 07 40 d0 86 a1 34 81 14 c5 1b 96 | .0....p.W.......0Z#.%.@...4..... |
1300 | 08 12 24 45 2c 21 8e b9 d1 3c 9e 34 14 19 7b 04 78 c5 91 0d 17 41 40 4e 6b 08 ac 00 90 4a 8e 28 | ..$E,!...<.4..{.x....A@Nk....J.( |
1320 | 47 38 a9 14 97 43 79 91 81 a2 8f 63 cc 42 b4 fe 90 6f 6e 8c 8c 29 d5 c3 7d 80 0b 91 81 4f cd d0 | G8...Cy....c.B...on..)..}....O.. |
1340 | 10 84 94 4e a4 b0 39 45 15 48 3f 9f 88 37 e1 3d 00 52 d1 29 32 13 8c 26 d4 26 86 e8 bc 55 80 10 | ...N..9E.H?..7.=.R.)2..&.&...U.. |
1360 | 04 8f d1 7c 05 8a e9 0c 92 2e 43 18 5a 31 74 dc 89 00 09 02 1b 04 d6 c6 0e 4c ad 38 aa f6 78 7b | ...|......C.Z1t..........L.8..x{ |
1380 | 52 f3 38 b4 cf e9 40 be ce 5a eb e1 f3 59 03 12 a3 87 8d e3 32 8a 31 ab 14 2a 0d 74 7d 8f 75 e7 | R.8...@..Z...Y......2.1..*.t}.u. |
13a0 | d0 3b 8f d3 f3 16 cb c6 c1 28 46 5d 18 5c 3a 66 cc ea 19 58 4d 1c c0 d3 8e b7 3e fa b2 37 8b f8 | .;.......(F].\:f...XM.....>..7.. |
13c0 | bf 6f fb fe 08 ae c3 5c 03 47 97 6a cc eb 78 03 00 04 1f e2 09 19 7c 00 eb 02 3e 50 8a 06 92 17 | .o.....\.G.j..x.......|...>P.... |
13e0 | 67 49 75 6f 1e 5d 78 b5 d5 ee 3b ee f9 1f e7 93 43 49 30 04 04 ef 87 b0 9a 08 28 0d a3 2c 0d aa | gIuo.]x...;.....CI0.......(..,.. |
1400 | ca a0 2c 8b f8 73 14 a1 2c 35 94 8e 1f 13 d3 c0 01 f8 64 48 a4 00 28 01 44 a5 bf 21 96 0e 21 88 | ..,..s..,5........dH..(.D..!..!. |
1420 | 27 3e 62 fe 5f 94 3a a6 0d 90 98 2c a7 70 de 07 0f 92 90 9c 8c 82 84 00 ef 32 29 97 1c 40 2a b1 | '>b._.:....,.p...........2)..@*. |
1440 | 11 08 42 29 d7 07 41 18 f0 9e 11 7c 7c 2e 27 62 32 a6 0c 04 97 98 c2 18 35 64 27 90 38 05 c9 c5 | ..B)..A....||.'b2.......5d'.8... |
1460 | ce e8 74 72 4e bf 61 de 23 99 58 a4 bf bd d0 0a 65 a1 a0 92 83 09 89 50 93 d4 4e 2d 32 3a 85 65 | ..trN.a.#.X.....e......P..N-2:.e |
1480 | 38 c2 81 b1 43 01 c1 bb 00 eb 05 91 d3 8d bf 47 a5 8a cc ae 16 60 37 85 1b 2b 3a 2f 2e 1b f2 10 | 8...C..........G.....`7..+:/.... |
14a0 | b5 30 01 8a 14 14 0b 24 00 ad 0d 68 5b 87 c5 da e2 74 d1 a3 34 0a bd 0d 08 00 ac b3 a0 20 93 03 | .0.....$...h[....t..4........... |
14c0 | 78 da f0 02 d0 1b 4f 1e fe ae be 77 ef 0e b6 39 e9 db 15 8c 01 8e 8e 6a cc 66 06 a0 78 62 01 01 | x.....O....w...9.......j.f..xb.. |
14e0 | 8a 18 0c 05 62 81 52 82 9e 12 8b ed 43 2c 53 05 82 5c d8 06 7a 31 21 38 6e 1a b9 7d fb f6 76 99 | ....b.R.....C,S..\..z1!8n..}..v. |
1500 | 30 1d 64 f3 5a e3 a1 07 af 62 56 15 28 4d 14 00 09 a5 1c 9f 09 4a 13 96 ad c3 fe dc 80 15 a7 9b | 0.d.Z....bV.(M.......J.......... |
1520 | 9c 86 e2 39 33 0d aa 42 a1 78 02 86 4d 80 8d ac 20 10 8e df 97 4a f9 d1 21 78 19 ca ed 41 3c 82 | ...93..B.x..M........J..!x...A<. |
1540 | 17 04 97 9c 53 d2 1e 68 a6 78 6a ab cc b2 13 42 e0 4d 74 91 be 9f 53 e8 ae 08 d0 3a 59 c1 f0 fb | ....S..h.xj....B.Mt...S....:Y... |
1560 | d3 69 af 18 1e 99 78 94 4d 8d 7e 37 04 a6 18 46 1b 66 b0 22 e8 64 a8 2a 3b 09 61 30 87 41 9a 0d | .i....x.M.~7...F.f.".d.*;.a0.A.. |
1580 | 49 61 79 88 24 63 e6 33 62 15 03 70 e9 e1 03 60 bd c4 ca 8e 6c 37 ec 5f b4 bd 69 ac 03 c8 0e 60 | Iay.$c.3b..p...`....l7._..i....` |
15a0 | fc b9 6d 6e 27 df 23 01 bd 03 9a de 41 82 a0 e9 3d 7a 1b 1d 0f 10 49 db c2 28 98 42 83 48 b0 5c | ..mn'.#.....A...=z....I..(.B.H.\ |
15c0 | af be 68 07 07 7c 51 38 80 37 dd ff 25 df 2e ae ff a9 be 6d 8e 5c d7 a0 2c 08 87 47 35 ea 99 81 | ..h..|Q8.7..%......m.\..,..G5... |
15e0 | 00 68 3a 8f a6 f5 60 25 98 95 1a 86 93 9a 2d 00 5d e7 70 be e8 b0 5a 7b 58 1b 13 76 e7 fc 56 e7 | .h:...`%......-.].p...Z{X..v..V. |
1600 | 58 d7 75 43 5d 78 7c 8a e5 a1 11 cc 8c be ef 71 7a 7a ba 25 1b a6 14 ce 1e 1d cc 70 f9 d2 01 0c | X.uC]x|........qzz.%.......p.... |
1620 | eb 18 7e 73 bc 51 39 c4 fc be e9 3c 3e 73 ab c3 8b 1f 32 10 15 4f 3b 1f 28 97 e1 e3 3f 29 ff 1c | ..~s.Q9....<>s....2..O;.(...?).. |
1640 | c8 24 d9 18 7f 00 86 88 23 f8 a4 47 91 48 c8 45 63 cf 27 6a 0c e9 59 31 54 a1 62 45 24 44 f1 0a | .$......#..G.H.Ec.'j..Y1T.bE$D.. |
1660 | 29 02 a7 64 9f 28 56 0d 44 00 db 3b d8 de c7 d3 38 55 13 40 40 ad 09 a4 22 17 e2 6d 72 2c 21 85 | )..d.(V.D..;....8U.@@..."..mr,!. |
1680 | fd 21 57 13 62 34 c0 0c 68 a5 a1 98 10 06 a7 19 1d 8a 51 2a 9e d2 4a c5 4e cc ec f0 92 90 2a 0b | .!W.b4..h.........Q*..J.N.....*. |
16a0 | 7d 90 22 01 67 63 68 de fb 38 91 c3 79 41 63 05 e7 9d c0 d9 4c 12 0a 5a 0b f4 36 c0 7b 80 f8 ce | }.".gch..8..yAc.....L..Z..6.{... |
16c0 | 9d 00 f9 1a e6 9a 7f fe 78 1c e9 79 ef a3 4a 31 11 84 d6 da d8 37 e0 1d 6e 9f 0b 3e 0e a0 60 81 | ........x..y..J1.....7..n..>..`. |
16e0 | 75 0e 5d ef 00 09 28 cb 02 87 fb 35 aa 4a e3 e8 b8 c2 ec 60 86 a2 9a 83 d4 c4 01 3c 3d c6 ff 57 | u.]...(....5.J.....`.......<=..W |
1700 | 5e f5 6d 0c ff 9e ce d9 23 d7 b7 28 0b c2 c1 51 8d ba 36 88 b3 20 3c ce d7 0e 6d ef 12 c9 e3 31 | ^.m.....#..(...Q..6...<...m....1 |
1720 | 2f 01 c5 0a c1 05 9c af 03 16 eb 1e bd 13 78 4f 20 24 2f 2f 12 25 ac 21 e0 f4 f4 14 fb fb fb 5b | /.............xO.$//.%.!.......[ |
1740 | 5d 82 bb ff b6 6d 3b 38 84 dd 52 57 59 68 14 5a 0f a7 ab 08 0d 11 47 1e 28 7a 60 08 e7 67 2d 8a | ]....m;8..RWYh.Z......G.(z`..g-. |
1760 | 52 0d c6 17 ef 53 1a c8 c4 20 59 69 17 c9 bd 22 11 88 de 79 f4 9d 4d 4c fc c6 00 25 c8 86 74 53 | R....S....Yi..."...y..ML...%..tS |
1780 | 0c a5 01 53 54 91 6b 30 1a 14 62 ad 5c d2 73 94 89 25 34 42 fa 3b 25 40 51 4c 07 82 0f 1b 27 40 | ...ST.k0..b.\.s..%4B.;%@QL....'@ |
17a0 | 04 53 32 94 89 d1 4a 4f 04 67 fd a8 ff 3e 39 1c 8e c6 ab 88 51 16 1a ac 22 c9 66 fb 98 9e 10 11 | .S2...JO.g...>9.....Q...".f..... |
17c0 | 74 9e a8 ac 32 c9 1a 09 41 a5 78 78 0f b3 c3 b3 d6 27 d5 64 4c 47 44 08 5e 80 de 0b da 3e ae 01 | t...2...A.xx.....'.dLGD.^....>.. |
17e0 | 8b 29 19 d0 3b 81 f3 31 3c cf d7 73 37 a2 cb a5 c1 7c bd c6 29 40 4e f5 76 d3 01 e7 62 04 d0 74 | .)..;..1<..s7....|..)@N.v...b..t |
1800 | 1e 67 cb 00 cd 21 a5 55 01 cc c0 61 a9 70 30 2f 30 ab 0d ea aa 40 59 19 cc 0e f6 a0 26 0e e0 a9 | .g...!.U...a.p0/0....@Y.....&... |
1820 | c7 5f 7b dd 2b fe 83 2e f8 77 4b bb 3a 76 cd 1a 75 49 38 3e aa 51 54 1a 42 40 9b 8c bf e9 1d 9c | ._{.+....wK.:v..uI8>.QT.B@...... |
1840 | 13 30 79 ac 12 91 64 34 b0 ee 05 8f 2f 02 56 56 a5 1a 75 d8 9a 03 38 9f cf b7 72 c0 f1 12 89 7c | .0y...d4..../.VV..u...8...r....| |
1860 | 52 64 ac d7 eb ad 90 d1 5a 0b 09 9b fc 57 2b 4e c4 de e8 84 0e 69 e6 5c 12 b1 ac 96 82 ae 21 30 | Rd......Z....W+N.....i.\......!0 |
1880 | 92 16 00 31 77 87 c4 9f 13 b2 92 0e f1 f5 59 95 b7 0e c5 5a 7b 2e cf 09 47 92 2c a8 28 ba 51 8a | ...1w.........Y....Z{...G.,.(.Q. |
18a0 | 51 56 06 da 44 87 41 29 27 0e 01 d0 12 2b 02 ac 18 f1 cf 19 0b 63 a2 61 2a 4d 60 52 23 f1 cc 86 | QV..D.A)'....+.......c.a*M`R#... |
18c0 | 0f 90 91 41 22 69 07 99 73 c4 92 c8 48 02 88 25 b1 f8 18 4e f8 c8 0b 6c 08 46 26 6c 74 06 bb 8b | ...A"i..s...H..%...N...l.F<... |
18e0 | 59 d2 86 25 70 4c 71 b0 3b a4 25 c8 c8 69 66 c9 b1 8c b8 82 8b cb b8 bb a9 c1 45 d5 9d ed 69 4f | Y..%pLq.;.%..if...........E...iO |
1900 | d1 71 a7 7a 07 14 a2 13 1a e7 7c 21 e4 47 d8 38 64 4c 1c c0 53 6b fc 5f fb ea b7 06 ef df dd 36 | .q.z......|!.G.8dL..Sk._.......6 |
1920 | 8b 63 bb 3e c7 81 11 1c 1e d5 98 ef c5 69 2d 8d f5 58 f7 1e ad f5 91 10 4a a4 9a 73 82 45 f0 08 | .c.>.........i-..X......J..s.E.. |
1940 | 12 70 bb 15 dc 5a 03 36 10 74 51 61 5e 32 ac 75 50 4a a3 2c 4b 94 65 39 dc 0c 55 55 42 a9 cd a8 | .p...Z.6.tQa^2.uPJ.,K.e9..UUB... |
1960 | f0 2c 1c b1 d6 c2 98 38 f2 bf 2c 4b 38 e7 b0 5e af d1 b6 5d 94 84 4a 3c 19 ab d2 a4 92 1f 86 61 | .,.....8..,K8..^...]..J<.......a |
1980 | 21 24 40 d3 ba 18 be 3b 89 dc 43 c8 3a fb d8 8c c3 7a 23 aa d1 9a 93 c1 27 a5 5e be f1 29 92 77 | !$@....;..C.:....z#.....'.^..).w |
19a0 | 9c 54 76 84 58 2e 34 65 3c 75 89 00 5d 68 68 15 65 ce 59 f3 a8 39 f1 5a 49 00 45 e9 63 c9 91 04 | .Tv.X.4e<u..]hh.e.Y..9.ZI.E.c... |
19c0 | a2 f3 a0 22 ee c2 93 a1 32 10 bf 1e 5c c8 fd 44 91 d1 17 01 79 40 92 e1 91 e2 c1 28 c4 0b 9c f8 | ..."....2...\..D....y@.....(.... |
19e0 | 54 ca 8c cc 3f 64 53 7a 65 92 28 f8 61 1e 2c 49 64 cb ae a2 c6 41 c7 34 28 15 49 20 89 6f c8 29 | T...?dSze.(.a.,Id....A.4(.I..o.) |
1a00 | 8e 24 22 73 08 15 b2 90 e2 02 8c 4f f6 9d 75 ee 43 6a 90 fb 02 8a 22 12 b7 48 dc 4c c5 84 a3 42 | .$"s.......O..u.Cj...."..H.L...B |
1a20 | a1 60 c1 da 01 ab f4 1a 7a eb b1 6e a2 f3 6f d7 0e 5d 63 a1 74 0f e6 30 39 80 a7 02 6f 07 e8 4f | .`......z..n..o..]c.t..09...o..O |
1a40 | 1f 7d c5 b7 5b 6f df d3 35 eb e3 66 75 86 4a 79 cc f7 6b 94 95 06 33 6d 6e 4a 89 e5 2e 92 cc 5c | .}..[o..5..fu.Jy..k...3mnJ.....\ |
1a60 | 03 3d 80 ae f3 38 eb 04 cb 9e e0 44 c1 98 02 75 3d c3 6c 36 1b 42 ff ab 57 af a2 28 0a 88 08 8a | .=...8.....D...u=.l6.B..W..(.... |
1a80 | c2 a0 2c cc 50 f0 ca 37 49 ce 11 89 08 6d db 62 b5 5a 8d 16 47 ca c0 1b fb 20 a9 0d 55 c5 5c 7b | ..,.P..7I....m.b.Z..G.......U.\{ |
1aa0 | 38 4d 08 4a 31 6c eb e0 d8 43 42 62 dc 13 bf 46 8c 0d e9 c5 80 d2 0c a5 22 e5 c6 3e 96 e7 b2 08 | 8M.J1l...CBb...F........"..>.... |
1ac0 | 88 46 cd 37 c4 71 14 99 2e a2 82 10 49 5c 43 4c 89 e0 cb 27 3d 52 de bf 5d da 97 2d c6 3c 2b 08 | .F.7.q......I\CL...'=R..]..-.<+. |
1ae0 | 69 a0 e0 43 20 c0 3b 88 cb 27 9b 24 d5 1f 81 28 0c f5 f2 5c 7a 0b 22 f0 2e 96 e8 62 aa a1 86 eb | i..C..;..'.$...(...\z."....b.... |
1b00 | 24 3e bf 57 3b 7a 0a d9 bc 12 c9 3c c0 c8 23 e4 43 9d d3 c7 9c 3e ce 6d 48 cc 9f bd 5d 3f 9f f4 | $>.W;z.....<..#.C....>.mH...]?.. |
1b20 | e3 26 ae 9c 16 8c 45 42 77 54 7f 28 f2 2e 5a 11 66 86 51 70 bc 02 9d 67 78 49 07 43 ef a0 19 31 | .&....EBwT.(..Z.f.Qp...gxI.C...1 |
1b40 | 25 71 21 11 b1 53 04 f0 94 e0 f7 bf f2 91 ef 2a 82 ff a9 be 59 1f 75 ab 33 cc 8c e0 f8 a0 42 55 | %q!..S.........*....Y.u.3.....BU |
1b60 | ea d8 8a 9a f2 44 45 84 99 d1 f0 3e ae 89 ca fa f2 de 09 ce 3a c1 a2 8b 93 36 8a c2 60 36 9f 61 | .....DE....>........:....6..`6.a |
1b80 | 6f 6f 0f 65 59 a2 28 0a 1c 1f 1f 63 3e 9f 0f ce a0 2e 0b 04 d7 41 48 0f 4a c1 4c 1a a5 e9 3d 43 | oo.eY.(....c>........AH.J.L...=C |
1ba0 | 0a e0 5c 54 bc e5 6a 40 60 42 9f 3e c7 ea ce e5 22 5a 11 82 a6 58 42 0b 40 e0 38 4e 3c d6 f0 e3 | ..\T..j@`B.>...."Z...XB.@.8N<... |
1bc0 | c7 b6 8f d1 41 ec 3c 8b a6 ce 94 e4 cb b2 39 2d c7 46 47 14 e5 c0 1e 91 f4 03 e7 d3 32 31 ea 31 | ....A.<.......9-.FG.........21.1 |
1be0 | 24 82 4f 5a ff 8d d2 6d a3 13 20 02 bc 60 70 4a 31 42 49 8a 3f 17 d2 e7 65 30 50 91 54 75 c8 61 | $.OZ...m.....`pJ1BI.?...e0P.Tu.a |
1c00 | b4 a4 d7 11 90 42 f4 9c fe 24 b9 b0 6c ea fb c4 b1 34 c9 b9 c7 62 fc 9a 92 16 41 52 4f c1 60 b4 | .....B...$..l....4...b....ARO.`. |
1c20 | 88 8d 52 95 26 cc 2a 8e 32 e4 1c bd a4 72 26 46 29 c6 56 ca 30 9a 15 b8 db cb 91 3f 3f 76 10 5b | ..R.&.*.2....r&F).V.0......??v.[ |
1c40 | 3d 02 cc 30 9a 51 55 1a a5 06 a4 07 1c 01 5e 04 24 01 9a 25 09 bf a2 34 d9 18 be 70 a1 cc e4 00 | =..0.QU.......^.$..%...4...p.... |
1c60 | 9e 24 5e f9 8a 47 be 65 bd b6 ef 5e fb f6 48 fa 25 f6 4b c1 7d 27 33 cc 4b 0d 10 a1 b7 01 ad 78 | .$^..G.e...^..H.%.K.}'3.K......x |
1c80 | 14 cc d0 4a 83 a9 c2 ac e8 10 02 e1 cc 39 74 4e 70 da 08 96 16 f0 42 28 8a 02 7b 7b 73 ec ef ef | ...J.........9tNp.....B(..{{s... |
1ca0 | a3 aa 2a 54 55 85 e3 e3 63 1c 1c 1c 0c 06 6c 8c 41 00 61 b5 6e a0 4d 01 62 0d 1e 95 b4 8c 31 38 | ..*TU...c.....l.A.a.n.M.b.....18 |
1cc0 | 3b 3b 1b a2 81 f1 98 e9 18 34 33 fa 3e c0 8b 07 88 60 0a 05 8c 48 b5 00 40 9b c8 80 03 02 f1 04 | ;;.......43.>....`...H..@....... |
1ce0 | 82 1e 6a f8 79 b9 88 f3 01 2e a4 48 80 09 65 a1 52 48 1f c3 ee 00 19 fa f6 39 89 f0 6d e7 60 91 | ..j.y......H..e.RH.......9..m.`. |
1d00 | c4 43 29 9c 97 54 29 10 d9 18 66 18 0d b8 26 8a 64 a0 d1 91 e0 b3 de a3 eb 6c 62 e0 43 aa c9 4b | .C)..T)...f...&.d........lb.C..K |
1d20 | ee fd 4d 11 b6 0c 06 9e 2b 11 44 49 30 95 1b 87 92 42 8f 00 58 e7 37 1d c1 b9 7d d6 a6 1a 1e 49 | ..M.....+.DI0....B..X.7...}....I |
1d40 | 4c 03 28 97 23 63 89 36 24 62 33 12 9d 1e de 39 28 0a 28 34 70 b4 a7 31 2b 25 96 00 ad 8f 4d 53 | L.(.#c.6$b3....9(.(4p..1+%....MS |
1d60 | 9d e0 e6 12 58 f6 01 8a f5 56 69 6f 3c e5 29 ce f8 f7 83 43 1f 8f 7c cf 5f df 54 0f b2 88 48 a1 | ....X....Vio<.)....C..|._.T...H. |
1d80 | 9e 19 1c 9d 54 98 15 84 03 67 b1 df 76 70 5e 60 5b 07 6f 3d 0a a3 30 af 34 e6 b5 42 55 c5 fe 93 | ....T....g..vp^`[.o=..0.4..BU... |
1da0 | c9 01 7c 81 98 d5 f3 9f ba 7e fd b1 93 66 71 13 57 f6 09 57 0f f7 71 b2 57 82 29 b2 fd 8d f3 70 | ..|......~...fq.W..W..q.W.)....p |
1dc0 | 5e e0 94 a0 0c 8c 66 65 51 95 c0 ac 2a 70 de 0a 16 7d c0 ca 46 11 4b 51 14 d8 df 3f c0 c1 c1 01 | ^.....feQ...*p...}..F.KQ...?.... |
1de0 | aa aa 42 5d d7 38 3a 3a c2 d1 d1 11 ca b2 1c 94 60 91 f8 4b dd 65 c1 c2 18 82 52 18 26 cb 30 33 | ..B].8::........`..K.e....R.&.03 |
1e00 | ba ae 1b e6 cc 3b e7 70 76 76 86 e0 dd 20 b2 39 da 2f 71 ba 74 38 38 c8 2d c4 29 8e cd 12 54 8a | .....;.pvv.....9./q.t88.-.)...T. |
1e20 | a2 9b 94 38 a7 dc 58 62 17 bf 1f d7 a0 37 3d f1 90 58 62 8c 6d c2 02 48 00 49 22 ab d2 09 ea 83 | ...8..Xb.....7=..Xb.m..H.I"..... |
1e40 | 8f 25 3e 8a ac 3b 73 96 27 27 83 4d ba fa e8 00 68 88 ad 99 11 35 01 a9 07 c1 bb 68 f8 ce 79 58 | .%>..;s.''.M....h....5.....h..yX |
1e60 | eb d3 6c 00 19 c2 70 49 a9 48 e6 06 44 42 6a dc 09 43 07 1d b2 82 31 6c 74 0b 20 4a 55 8d 18 be | ..l...pI.H..DBj..C....1lt..JU... |
1e80 | 5b c9 dd 92 21 3a 01 41 8a a6 d2 aa ee 54 0a 8c 6b bf 43 4a 3d 08 85 89 0e 3f 84 80 5e 09 14 c5 | [...!:.A.....T..k.CJ=....?..^... |
1ea0 | e7 6a f6 43 39 f1 22 f1 cf 38 0a 18 47 66 79 4a 50 2e f5 0e 11 40 1e f1 26 0a da 28 94 95 42 55 | .j.C9."..8..GfyJP....@..&..(..BU |
1ec0 | 10 b4 13 10 79 38 17 d0 84 80 5e 02 b4 22 18 45 a9 7b 32 69 21 26 07 f0 05 82 e8 0c c0 b3 99 84 | ....y8....^..".E.{2i!&.......... |
1ee0 | 4b 1d e5 bd 31 14 8e a4 52 1e 72 e3 83 c0 71 40 55 33 4c 51 a0 6d 3d 56 96 d1 38 42 00 a1 28 4b | K...1...R.r...q@U3LQ.m=V..8B..(K |
1f00 | ec ed ed 5d 68 fc 55 55 6d dd 20 39 14 0c 21 40 9c c0 39 3f 90 43 cc 8c f5 7a 8d c5 62 31 dc 48 | ...]h.UUm..9..!@..9?.C...z..b1.H |
1f20 | eb 75 83 be ef 36 4c 31 45 05 e0 bf fa e4 12 cf 7d d6 7e d4 df 67 45 5b 62 cf 43 aa 6d 43 b2 08 | .u...6L1E.......}.~..gE[b.C.mC.. |
1f40 | 09 f0 5e e0 6c 6c 77 15 84 d8 3a 3b 62 dd a3 96 df 8f c2 62 80 29 9d b8 9c e4 bb e9 17 0d 33 89 | ..^.llw...:;b......b.)........3. |
1f60 | 13 27 82 94 d7 4b 18 e2 fe 4d 75 03 80 73 18 72 5d ef c3 20 4c 1a f8 00 d9 30 ee d1 2e 46 06 cd | .'...K...Mu..s.r]...L....0...F.. |
1f80 | 71 98 88 04 41 c8 ed 80 24 43 67 64 fe 1d 5b f4 7e 7a 19 cc 79 fe 07 43 e5 a6 a3 94 ea 84 24 01 | q...A...$Cgd..[.~z..y..C......$. |
1fa0 | 26 a2 c1 41 fa 80 94 1a 6d 4a b7 44 49 02 cd 32 44 61 9f cb fe 8e f1 28 f0 f1 6c 87 ad f0 3f 0d | &..A....mJ.DI..2Da.....(..l...?. |
1fc0 | 79 25 ca 5f 8b 65 c6 90 3a 00 b3 a3 f6 41 a0 c6 cd 55 ce 82 fc 44 02 7e c1 e8 da f5 7b 0f f7 ca | y%._.e..:....A...U...D.~....{... |
1fe0 | 77 14 7b 97 5e ac fd 9a cf d7 2d 0a cd a8 0b 0d cd 8c ca c4 63 8b 48 81 39 e6 eb 8b 2e e0 b1 f3 | w.{.^.....-.........c.H.9....... |
2000 | 80 b3 0e 08 30 30 25 63 3e db 18 ff 6c 36 c3 d1 d1 11 0e 0f 0f 51 96 e5 b0 fa a9 eb e2 7c c0 4c | ....00%c>...l6.......Q.......|.L |
2020 | f2 e5 30 70 dc 51 b6 5a ad 70 ed da 35 58 6b c1 cc 58 2e 97 b8 7d 7a 2b 1a 1a 11 48 19 9c 1c 18 | ..0p.Q.Z.p..5Xk..X...}z+...H.... |
2040 | 3c 7e db a3 28 00 d7 7b 88 13 90 8a 6a 31 c5 31 15 58 ad 6d 5c 67 1d 62 2d 3b 1a 5d 9e 62 1b 62 | <~..(..{....j1.1.X.m\g.b-;.].b.b |
2060 | b3 4b ea ea 5e 13 86 00 00 20 00 49 44 41 54 c3 cf ac 7f 70 01 5d aa 06 c4 fa 77 34 1e 63 22 7f | .K..^......IDAT....p.]....w4.c". |
2080 | 10 65 c5 2a 96 f7 78 e4 04 12 ef 90 39 36 6f 63 bd 3f f7 04 0b 00 db c7 5a 7d 76 0c 44 51 35 c9 | .e.*..x.....96oc.?......Z}v.DQ5. |
20a0 | c4 f1 7b 43 9c 4d e0 93 d0 07 b4 29 e7 71 2a fd c5 91 04 0e 99 e3 0b a9 41 28 47 01 9b fc 3e 7e | ..{C.M.....).q*.........A(G...>~ |
20c0 | 8e a3 df 4a 7f 43 6c f8 89 7c 06 83 d2 18 2e 47 01 96 18 e4 05 9d 64 07 99 67 fd db 81 b4 54 0a | ...J.Cl..|.....G......d..g....T. |
20e0 | 89 2c 8d 35 fa f0 04 23 dd 76 79 81 ac c9 08 21 6c a5 0b e3 f2 27 29 06 4b 9c c1 60 ad 47 9b 84 | .,.5...#.vy....!l....').K..`.G.. |
2100 | 4d 5d 1f 5f 4b 6b 3d 3a ef 11 1c a1 f7 31 62 0a eb 6e 33 04 61 72 00 5f 88 03 38 fb cd 67 5f da | M]._Kk=:.....1b..n3.ar._..8..g_. |
2120 | 33 a5 29 be a7 6f f4 c3 4d 73 ce d7 4f d7 38 d9 af 30 ab 8a 38 48 43 11 5c 60 58 0f ac bb 80 1b | 3.)..o..Ms..O.8..0..8HC.\`X..... |
2140 | 4b 8f db 2b 41 eb 08 aa d0 28 cb 0a f3 f9 1c 65 8a 02 ae 5c b9 82 c3 c3 c3 a1 bc d7 75 1d ba ae | K..+A....(.....e...\........u... |
2160 | db da 1d 97 99 e1 d8 b1 17 67 d8 ad 56 2b 3c fe f8 e3 43 fe bf 5a ad 71 fd c6 75 74 4d 03 95 04 | .........g..V+<...C..Z.q..utM... |
2180 | 2f f7 5f 9a 63 56 16 b8 b1 74 78 e5 8b 8a 18 72 87 00 16 82 24 e2 cf fb 80 c5 da a2 50 31 24 b7 | /._.cV...tx....r....$.......P1$. |
21a0 | 2e 86 9c 9c ea e2 22 b1 6a e1 1d a1 28 36 fd f3 39 bc de 88 7f 62 c9 21 84 d4 35 98 06 76 28 c6 | ......".j...(6..9....b.!..5..v(. |
21c0 | 20 b0 49 82 fe d1 68 ae cc 98 13 bc cf 3a 88 5c c3 96 81 65 57 c9 7b 88 8a ed c7 81 e2 88 53 3f | ..I...h......:.\...eW.{.......S? |
21e0 | ea e6 63 ce e4 e1 a6 f4 46 8a c0 a9 2c 38 2c 4a 1d b7 52 0f 35 42 6c 9c 03 8d 2a 14 f9 75 a6 ee | ..c.....F...,8,J..R.5Bl...*..u.. |
2200 | 4b 16 4a 27 2b a5 0c 6a 3c 96 4d 12 cf 91 ab 2c f9 a7 7f 76 e3 1f 6b 37 c6 fb 02 76 37 44 85 a1 | K.J'+..j<.M....,...v..k7...v7D.. |
2220 | 77 62 33 8a cc 7b 41 60 d9 5e 06 4b c3 54 b0 f8 ee a4 e6 30 d0 d4 0e fc 85 3b 80 62 7d ad e6 f9 | wb3..{A`.^.K.T.....0.....;.b}... |
2240 | af b1 d6 50 b3 bd ef 11 91 87 d7 eb 05 63 d1 81 52 a8 4d 2a b2 e9 ab 5e 70 7d e9 71 7b 15 d0 7b | ...P.........c..R.M*...^p}.q{..{ |
2260 | 02 2b 83 a2 2c 30 ab 6b 14 85 c1 7c 3e c7 d5 ab 57 71 f5 ea 55 94 65 89 be ef b1 5e af b7 26 c4 | .+..,0.k...|>...Wq..U.e....^..&. |
2280 | 8e c9 a0 9c f3 1b 63 60 ad c5 a7 3f fd 69 2c 16 0b 88 08 da b6 c5 62 71 0e db f7 49 3a ea 71 b8 | ......c`...?.i,.......bq...I:.q. |
22a0 | bf 8f 79 5d e0 fa 59 cc 25 f7 0a da b0 d9 c2 b0 3d c1 c2 e1 74 d1 a1 6d 1a 38 0a d0 cc 10 8a 25 | ..y]..Y.%.......=...t..m.8.....% |
22c0 | 26 a5 52 f7 a2 8f a1 67 10 81 b5 80 a7 00 52 18 c6 52 e7 c6 1d a4 9a be ce 4d 45 4c 31 45 52 0a | &.R....g......R..R.......MEL1ER. |
22e0 | ac b2 26 66 c3 d2 0b 00 f8 d4 9b 2f 1b 01 0b b2 80 26 e6 0c 51 9f cf 1b 45 a2 84 38 3b c1 33 21 | ..&f......./.....&..Q...E..8;.3! |
2300 | b5 0b 0c 3d 02 00 c7 d1 5f 61 33 14 84 79 33 f3 90 72 37 a2 48 d2 3a d0 a8 9c 47 69 e0 08 0d e9 | ...=...._a3..y3..r7.H.:...Gi.... |
2320 | 5c 4e 57 b2 fc 58 a5 32 26 21 fe 6d 5a 47 b1 d4 38 95 e1 c4 fc 33 6f 52 8f b1 de 60 6c f4 bb 1f | \NW..X.2&!.mZG..8....3oR...`l... |
2340 | ef 7e 7d 1c 05 c4 94 23 57 1f 02 40 b1 24 ab 75 6a 36 22 05 09 71 a8 6a a1 15 4a 1d 49 c0 59 a5 | .~}....#W..@.$.uj6"..q.j..J.I.Y. |
2360 | 10 94 b9 b0 1d 79 72 00 4f 12 7f fa c1 1b f2 68 75 e3 da f2 b5 2f fb 55 57 96 a8 e7 fb 7f 93 89 | .....yr.O......hu..../.UW....... |
2380 | 5e ec ed 9a 1b eb c1 da 40 82 60 d9 09 6e 2c 1c 6e ad 04 bd 27 68 65 50 56 25 aa aa 42 51 14 98 | ^.......@.`..n,.n...'hePV%..BQ.. |
23a0 | cf e7 b8 7c f9 32 ae 5c b9 82 d9 6c b6 55 fb 1d 1b bd da 61 6e 73 3b f0 e9 e9 29 da b6 1d 71 00 | ...|.2.\...l.U.....ans;...)...q. |
23c0 | 4b 34 4d 13 f3 7e 36 38 3c 3a c4 c9 e1 0c b7 17 6b 04 61 18 a3 c1 0c f4 5d 13 eb 02 44 e8 fb 48 | K4M..~68<:......k.a.....]...D..H |
23e0 | 5c 9e 2e 3b 1c 95 89 40 a3 dc 97 ae 92 fa 8e 50 16 91 08 ec 7d 40 97 e4 b6 1c a2 bc d8 24 41 8d | \..;...@.......P....}@.......$A. |
2400 | 4e 72 5d 4a 05 71 a6 a8 3c 2c ab 38 e9 37 08 e0 32 f1 17 24 8a 8e 52 3e ad 55 34 b5 c0 18 da 6e | Nr]J.q..<,.8.7..2..$..R>.U4....n |
2420 | d5 a0 15 88 0e 80 53 ca 40 21 40 7c 24 eb bd 8e b5 ed cd e0 e0 34 01 b9 8f 03 45 32 bf 91 fb f9 | ......S.@!@|$........4....E2.... |
2440 | 0b 43 c9 80 63 af 85 4f dd 87 79 b0 49 7c 2e 0f 8a 42 49 65 42 9f 88 c1 9c ba 68 a5 10 02 23 04 | .C..c..O..y.I|...BIeB.....h...#. |
2460 | 0d 09 06 d6 11 5a 15 60 6d 7c ed 31 bd 21 68 95 9a 91 bc c0 53 18 22 81 6c d8 39 e2 bb 48 19 98 | .....Z.`m|.1.!h.....S.".l.9..H.. |
2480 | 65 c1 e3 65 a1 ce 39 38 eb e0 ac 45 a0 00 82 41 59 30 ea 8a a1 59 81 44 03 42 71 20 48 00 8c 66 | e..e..98...E...AY0...Y.D.Bq.H..f |
24a0 | 5c 3d ae 71 e9 78 06 5d 1d 82 78 92 02 3f 25 78 5f 0b f9 d6 eb 1f be ae ae be ec d7 b9 34 30 7b | \=.q.x.]..x..?%x_............40{ |
24c0 | f3 ef 09 8e 1f 26 b1 dc f4 1e 9d 17 5c 3b 0f b8 b9 8c 0d 23 da 18 54 75 cc f5 8d 31 98 cd 66 78 | .....&......\;.....#..Tu...1..fx |
24e0 | d6 b3 9e 85 fb ee bb 0f b3 d9 6c b8 11 72 c9 af 28 8a ad 75 d1 b9 4f 3c 9f 06 1f fd e8 47 e3 a4 | ..........l..r..(..u..O<.....G.. |
2500 | 5f 22 ac d7 6b dc be 7d 7b ab 62 30 9b cd b0 37 af b1 ee e2 d8 6c 6d 0c aa aa c4 59 67 70 1f c5 | _"..k..}{.b0...7.....lm....Ygp.. |
2520 | e6 24 ad 08 8c 80 2e f8 18 95 1c 14 80 10 3a 07 40 a9 c8 1a c3 c3 85 00 a5 15 4c a9 c0 81 00 1b | .$............:.@.........L..... |
2540 | e0 25 69 e5 29 20 88 87 13 01 0f 5d 6c 0a 45 69 a0 94 86 d6 0a 55 a9 c1 2a 1a 73 6e 4d 0d 01 51 | .%i.)......]l.Ei.....U..*.snM..Q |
2560 | 9c 12 04 41 1c 7c f0 d0 a6 84 49 7c 84 a4 5e 83 ac a2 f3 ce 41 c4 a3 2c ca 28 a8 4a ea 3f ed 02 | ...A.|....I|..^.....A..,.(.J.?.. |
2580 | ac f3 70 21 8e ca ea ba 16 cb e5 0a 5e 08 c6 54 28 ab 2a 3a be d4 0d 58 17 6a 30 4e ef 05 7d aa | ..p!........^..T(.*:...X.j0N..}. |
25a0 | 9a 68 b5 d1 de eb 11 0b ef ac 8b fa 0d 6b d1 bb 3e 36 20 95 35 ca 59 1d 47 73 99 06 30 2d 44 80 | .h...........k..>6..5.Y.Gs..0-D. |
25c0 | da 7a 58 ef e2 eb 0f 36 ce 41 d4 02 6d 1c 82 2c 85 25 90 04 b9 b0 8f 63 97 07 b8 48 02 3c a2 0a | .zX....6.A..m..,.%.....c...H.<.. |
25e0 | a3 03 86 08 2b 43 ba 9c a1 9c 19 cc 4a 0d 26 a0 6d d7 d0 81 a0 94 41 59 1a ec 1d cd 50 cd f7 a1 | ....+C......J.&.m.....AY....P... |
2600 | ca 7d 10 2b 9a 1c c0 53 84 df f8 08 e4 5b bb 8f 3d 8e 17 3c fb 57 b5 aa 45 e9 ea 7b 7a cb 0f 2f | .}.+...S.....[..=..<.W..E..{z../ |
2620 | 1b a7 6e 2e 1c 6e 2d 05 4e 38 cd bb 2f 51 d7 35 ca b2 c4 6c 36 c3 95 2b 57 70 f5 ea 55 cc e7 f3 | ..n..n-.N8../Q.5.
* @param index position to validate
* @return true/false
*/
bool isValidIndex(v3s16 index);
/**
* translate position to float position
* @param pos integer position
* @return float position
*/
v3f tov3f(v3s16 pos);
/* algorithm functions */
/**
* calculate 2d manahttan distance to target on the xz plane
* @param pos position to calc distance
* @return integer distance
*/
int getXZManhattanDist(v3s16 pos);
/**
* get best direction based uppon heuristics
* @param directions list of unchecked directions
* @param g_pos mapnode to start from
* @return direction to check
*/
v3s16 getDirHeuristic(std::vector<v3s16> &directions, PathGridnode &g_pos);
/**
* build internal data representation of search area
* @return true/false if costmap creation was successfull
*/
bool buildCostmap();
/**
* calculate cost of movement
* @param pos real world position to start movement
* @param dir direction to move to
* @return cost information
*/
PathCost calcCost(v3s16 pos, v3s16 dir);
/**
* recursive update whole search areas total cost information
* @param ipos position to check next
* @param srcdir positionc checked last time
* @param total_cost cost of moving to ipos
* @param level current recursion depth
* @return true/false path to destination has been found
*/
bool updateAllCosts(v3s16 ipos, v3s16 srcdir, int total_cost, int level);
/**
* recursive try to find a patrh to destionation
* @param ipos position to check next
* @param srcdir positionc checked last time
* @param total_cost cost of moving to ipos
* @param level current recursion depth
* @return true/false path to destination has been found
*/
bool updateCostHeuristic(v3s16 ipos, v3s16 srcdir, int current_cost, int level);
/**
* recursive build a vector containing all nodes from source to destination
* @param path vector to add nodes to
* @param pos pos to check next
* @param level recursion depth
*/
void buildPath(std::vector<v3s16> &path, v3s16 pos, int level);
/* variables */
int m_max_index_x; /**< max index of search area in x direction */
int m_max_index_y; /**< max index of search area in y direction */
int m_max_index_z; /**< max index of search area in z direction */
int m_searchdistance; /**< max distance to search in each direction */
int m_maxdrop; /**< maximum number of blocks a path may drop */
int m_maxjump; /**< maximum number of blocks a path may jump */
int m_min_target_distance; /**< current smalest path to target */
bool m_prefetch; /**< prefetch cost data */
v3s16 m_start; /**< source position */
v3s16 m_destination; /**< destination position */
core::aabbox3d<s16> m_limits; /**< position limits in real map coordinates */
/** contains all map data already collected and analyzed.
Access it via the getIndexElement/getIdxElem methods. */
friend class GridNodeContainer;
GridNodeContainer *m_nodes_container;
ServerEnvironment *m_env; /**< minetest environment pointer */
#ifdef PATHFINDER_DEBUG
/**
* print collected cost information
*/
void printCost();
/**
* print collected cost information in a specific direction
* @param dir direction to print
*/
void printCost(PathDirections dir);
/**
* print type of node as evaluated
*/
void printType();
/**
* print pathlenght for all nodes in search area
*/
void printPathLen();
/**
* print a path
* @param path path to show
*/
void printPath(std::vector<v3s16> path);
/**
* print y direction for all movements
*/
void printYdir();
/**
* print y direction for moving in a specific direction
* @param dir direction to show data
*/
void printYdir(PathDirections dir);
/**
* helper function to translate a direction to speaking text
* @param dir direction to translate
* @return textual name of direction
*/
std::string dirToName(PathDirections dir);
#endif
};
/******************************************************************************/
/* implementation */
/******************************************************************************/
std::vector<v3s16> get_path(ServerEnvironment* env,
v3s16 source,
v3s16 destination,
unsigned int searchdistance,
unsigned int max_jump,
unsigned int max_drop,
PathAlgorithm algo)
{
Pathfinder searchclass;
return searchclass.getPath(env,
source, destination,
searchdistance, max_jump, max_drop, algo);
}
/******************************************************************************/
PathCost::PathCost()
: valid(false),
value(0),
direction(0),
updated(false)
{
//intentionaly empty
}
/******************************************************************************/
PathCost::PathCost(const PathCost &b)
{
valid = b.valid;
direction = b.direction;
value = b.value;
updated = b.updated;
}
/******************************************************************************/
PathCost &PathCost::operator= (const PathCost &b)
{
valid = b.valid;
direction = b.direction;
value = b.value;
updated = b.updated;
return *this;
}
/******************************************************************************/
PathGridnode::PathGridnode()
: valid(false),
target(false),
source(false),
totalcost(-1),
sourcedir(v3s16(0, 0, 0)),
pos(v3s16(0, 0, 0)),
is_element(false),
type('u')
{
//intentionaly empty
}
/******************************************************************************/
PathGridnode::PathGridnode(const PathGridnode &b)
: valid(b.valid),
target(b.target),
source(b.source),
totalcost(b.totalcost),
sourcedir(b.sourcedir),
pos(b.pos),
is_element(b.is_element),
type(b.type)
{
directions[DIR_XP] = b.directions[DIR_XP];
directions[DIR_XM] = b.directions[DIR_XM];
directions[DIR_ZP] = b.directions[DIR_ZP];
directions[DIR_ZM] = b.directions[DIR_ZM];
}
/******************************************************************************/
PathGridnode &PathGridnode::operator= (const PathGridnode &b)
{
valid = b.valid;
target = b.target;
source = b.source;
is_element = b.is_element;
totalcost = b.totalcost;
sourcedir = b.sourcedir;
pos = b.pos;
type = b.type;
directions[DIR_XP] = b.directions[DIR_XP];
directions[DIR_XM] = b.directions[DIR_XM];
directions[DIR_ZP] = b.directions[DIR_ZP];
directions[DIR_ZM] = b.directions[DIR_ZM];
return *this;
}
/******************************************************************************/
PathCost PathGridnode::getCost(v3s16 dir)
{
if (dir.X > 0) {
return directions[DIR_XP];
}
if (dir.X < 0) {
return directions[DIR_XM];
}
if (dir.Z > 0) {
return directions[DIR_ZP];
}
if (dir.Z < 0) {
return directions[DIR_ZM];
}
PathCost retval;
return retval;
}
/******************************************************************************/
void PathGridnode::setCost(v3s16 dir, const PathCost &cost)
{
if (dir.X > 0) {
directions[DIR_XP] = cost;
}
if (dir.X < 0) {
directions[DIR_XM] = cost;
}
if (dir.Z > 0) {
directions[DIR_ZP] = cost;
}
if (dir.Z < 0) {
directions[DIR_ZM] = cost;
}
}
void GridNodeContainer::initNode(v3s16 ipos, PathGridnode *p_node)
{
INodeDefManager *ndef = m_pathf->m_env->getGameDef()->ndef();
PathGridnode &elem = *p_node;
v3s16 realpos = m_pathf->getRealPos(ipos);
MapNode current = m_pathf->m_env->getMap().getNodeNoEx(realpos);
MapNode below = m_pathf->m_env->getMap().getNodeNoEx(realpos + v3s16(0, -1, 0));
if ((current.param0 == CONTENT_IGNORE) ||
(below.param0 == CONTENT_IGNORE)) {
DEBUG_OUT("Pathfinder: " << PP(realpos) <<
" current or below is invalid element" << std::endl);
if (current.param0 == CONTENT_IGNORE) {
elem.type = 'i';
DEBUG_OUT(PP(ipos) << ": " << 'i' << std::endl);
}
return;
}
//don't add anything if it isn't an air node
if (ndef->get(current).walkable || !ndef->get(below).walkable) {
DEBUG_OUT("Pathfinder: " << PP(realpos)
<< " not on surface" << std::endl);
if (ndef->get(current).walkable) {
elem.type = 's';
DEBUG_OUT(PP(ipos) << ": " << 's' << std::endl);
} else {
elem.type = '-';
DEBUG_OUT(PP(ipos) << ": " << '-' << std::endl);
}
return;
}
elem.valid = true;
elem.pos = realpos;
elem.type = 'g';
DEBUG_OUT(PP(ipos) << ": " << 'a' << std::endl);
if (m_pathf->m_prefetch) {
elem.directions[DIR_XP] = m_pathf->calcCost(realpos, v3s16( 1, 0, 0));
elem.directions[DIR_XM] = m_pathf->calcCost(realpos, v3s16(-1, 0, 0));
elem.directions[DIR_ZP] = m_pathf->calcCost(realpos, v3s16( 0, 0, 1));
elem.directions[DIR_ZM] = m_pathf->calcCost(realpos, v3s16( 0, 0,-1));
}
}
ArrayGridNodeContainer::ArrayGridNodeContainer(Pathfinder *pathf, v3s16 dimensions) :
m_x_stride(dimensions.Y * dimensions.Z),
m_y_stride(dimensions.Z)
{
m_pathf = pathf;
m_nodes_array.resize(dimensions.X * dimensions.Y * dimensions.Z);
INFO_TARGET << "Pathfinder ArrayGridNodeContainer constructor." << std::endl;
for (int x = 0; x < dimensions.X; x++) {
for (int y = 0; y < dimensions.Y; y++) {
for (int z= 0; z < dimensions.Z; z++) {
v3s16 ipos(x, y, z);
initNode(ipos, &access(ipos));
}
}
}
}
PathGridnode &ArrayGridNodeContainer::access(v3s16 p)
{
return m_nodes_array[p.X * m_x_stride + p.Y * m_y_stride + p.Z];
}
MapGridNodeContainer::MapGridNodeContainer(Pathfinder *pathf)
{
m_pathf = pathf;
}
PathGridnode &MapGridNodeContainer::access(v3s16 p)
{
std::map<v3s16, PathGridnode>::iterator it = m_nodes.find(p);
if (it != m_nodes.end()) {
return it->second;
}
PathGridnode &n = m_nodes[p];
initNode(p, &n);
return n;
}
/******************************************************************************/
std::vector<v3s16> Pathfinder::getPath(ServerEnvironment *env,
v3s16 source,
v3s16 destination,
unsigned int searchdistance,
unsigned int max_jump,
unsigned int max_drop,
PathAlgorithm algo)
{
#ifdef PATHFINDER_CALC_TIME
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
#endif
std::vector<v3s16> retval;
//check parameters
if (env == 0) {
ERROR_TARGET << "missing environment pointer" << std::endl;
return retval;
}
m_searchdistance = searchdistance;
m_env = env;
m_maxjump = max_jump;
m_maxdrop = max_drop;
m_start = source;
m_destination = destination;
m_min_target_distance = -1;
m_prefetch = true;
if (algo == PA_PLAIN_NP) {
m_prefetch = false;
}
int min_x = MYMIN(source.X, destination.X);
int max_x = MYMAX(source.X, destination.X);
int min_y = MYMIN(source.Y, destination.Y);
int max_y = MYMAX(source.Y, destination.Y);
int min_z = MYMIN(source.Z, destination.Z);
int max_z = MYMAX(source.Z, destination.Z);
m_limits.MinEdge.X = min_x - searchdistance;
m_limits.MinEdge.Y = min_y - searchdistance;
m_limits.MinEdge.Z = min_z - searchdistance;
m_limits.MaxEdge.X = max_x + searchdistance;
m_limits.MaxEdge.Y = max_y + searchdistance;
m_limits.MaxEdge.Z = max_z + searchdistance;
v3s16 diff = m_limits.MaxEdge - m_limits.MinEdge;
m_max_index_x = diff.X;
m_max_index_y = diff.Y;
m_max_index_z = diff.Z;
delete m_nodes_container;
if (diff.getLength() > 5) {
m_nodes_container = new MapGridNodeContainer(this);
} else {
m_nodes_container = new ArrayGridNodeContainer(this, diff);
}
#ifdef PATHFINDER_DEBUG
printType();
printCost();
printYdir();
#endif
//validate and mark start and end pos
v3s16 StartIndex = getIndexPos(source);
v3s16 EndIndex = getIndexPos(destination);
PathGridnode &startpos = getIndexElement(StartIndex);
PathGridnode &endpos = getIndexElement(EndIndex);
if (!startpos.valid) {
VERBOSE_TARGET << "invalid startpos" <<
"Index: " << PP(StartIndex) <<
"Realpos: " << PP(getRealPos(StartIndex)) << std::endl;
return retval;
}
if (!endpos.valid) {
VERBOSE_TARGET << "invalid stoppos" <<
"Index: " << PP(EndIndex) <<
"Realpos: " << PP(getRealPos(EndIndex)) << std::endl;
return retval;
}
endpos.target = true;
startpos.source = true;
startpos.totalcost = 0;
bool update_cost_retval = false;
switch (algo) {
case PA_DIJKSTRA:
update_cost_retval = updateAllCosts(StartIndex, v3s16(0, 0, 0), 0, 0);
break;
case PA_PLAIN_NP:
case PA_PLAIN:
update_cost_retval = updateCostHeuristic(StartIndex, v3s16(0, 0, 0), 0, 0);
break;
default:
ERROR_TARGET << "missing PathAlgorithm"<< std::endl;
break;
}
if (update_cost_retval) {
#ifdef PATHFINDER_DEBUG
std::cout << "Path to target found!" << std::endl;
printPathLen();
#endif
//find path
std::vector<v3s16> path;
buildPath(path, EndIndex, 0);
#ifdef PATHFINDER_DEBUG
std::cout << "Full index path:" << std::endl;
printPath(path);
#endif
//finalize path
std::vector<v3s16> full_path;
for (std::vector<v3s16>::iterator i = path.begin();
i != path.end(); ++i) {
full_path.push_back(getIndexElement(*i).pos);
}
#ifdef PATHFINDER_DEBUG
std::cout << "full path:" << std::endl;
printPath(full_path);
#endif
#ifdef PATHFINDER_CALC_TIME
timespec ts2;
clock_gettime(CLOCK_REALTIME, &ts2);
int ms = (ts2.tv_nsec - ts.tv_nsec)/(1000*1000);
int us = ((ts2.tv_nsec - ts.tv_nsec) - (ms*1000*1000))/1000;
int ns = ((ts2.tv_nsec - ts.tv_nsec) - ( (ms*1000*1000) + (us*1000)));
std::cout << "Calculating path took: " << (ts2.tv_sec - ts.tv_sec) <<
"s " << ms << "ms " << us << "us " << ns << "ns " << std::endl;
#endif
return full_path;
}
else {
#ifdef PATHFINDER_DEBUG
printPathLen();
#endif
ERROR_TARGET << "failed to update cost map"<< std::endl;
}
//return
return retval;
}
/******************************************************************************/
Pathfinder::Pathfinder() :
m_max_index_x(0),
m_max_index_y(0),
m_max_index_z(0),
m_searchdistance(0),
m_maxdrop(0),
m_maxjump(0),
m_min_target_distance(0),
m_prefetch(true),
m_start(0, 0, 0),
m_destination(0, 0, 0),
m_nodes_container(NULL),
m_env(0)
{
//intentionaly empty
}
Pathfinder::~Pathfinder()
{
delete m_nodes_container;
}
/******************************************************************************/
v3s16 Pathfinder::getRealPos(v3s16 ipos)
{
return m_limits.MinEdge + ipos;
}
/******************************************************************************/
PathCost Pathfinder::calcCost(v3s16 pos, v3s16 dir)
{
INodeDefManager *ndef = m_env->getGameDef()->ndef();
PathCost retval;
retval.updated = true;
v3s16 pos2 = pos + dir;
//check limits
if (!m_limits.isPointInside(pos2)) {
DEBUG_OUT("Pathfinder: " << PP(pos2) <<
" no cost -> out of limits" << std::endl);
return retval;
}
MapNode node_at_pos2 = m_env->getMap().getNodeNoEx(pos2);
//did we get information about node?
if (node_at_pos2.param0 == CONTENT_IGNORE ) {
VERBOSE_TARGET << "Pathfinder: (1) area at pos: "
<< PP(pos2) << " not loaded";
return retval;
}
if (!ndef->get(node_at_pos2).walkable) {
MapNode node_below_pos2 =
m_env->getMap().getNodeNoEx(pos2 + v3s16(0, -1, 0));
//did we get information about node?
if (node_below_pos2.param0 == CONTENT_IGNORE ) {
VERBOSE_TARGET << "Pathfinder: (2) area at pos: "
<< PP((pos2 + v3s16(0, -1, 0))) << " not loaded";
return retval;
}
if (ndef->get(node_below_pos2).walkable) {
retval.valid = true;
retval.value = 1;
retval.direction = 0;
DEBUG_OUT("Pathfinder: "<< PP(pos)
<< " cost same height found" << std::endl);
}
else {
v3s16 testpos = pos2 - v3s16(0, -1, 0);
MapNode node_at_pos = m_env->getMap().getNodeNoEx(testpos);
while ((node_at_pos.param0 != CONTENT_IGNORE) &&
(!ndef->get(node_at_pos).walkable) &&
(testpos.Y > m_limits.MinEdge.Y)) {
testpos += v3s16(0, -1, 0);
node_at_pos = m_env->getMap().getNodeNoEx(testpos);
}
//did we find surface?
if ((testpos.Y >= m_limits.MinEdge.Y) &&
(node_at_pos.param0 != CONTENT_IGNORE) &&
(ndef->get(node_at_pos).walkable)) {
if ((pos2.Y - testpos.Y - 1) <= m_maxdrop) {
retval.valid = true;
retval.value = 2;
//difference of y-pos +1 (target node is ABOVE solid node)
retval.direction = ((testpos.Y - pos2.Y) +1);
DEBUG_OUT("Pathfinder cost below height found" << std::endl);
}
else {
INFO_TARGET << "Pathfinder:"
" distance to surface below to big: "
<< (testpos.Y - pos2.Y) << " max: " << m_maxdrop
<< std::endl;
}
}
else {
DEBUG_OUT("Pathfinder: no surface below found" << std::endl);
}
}
}
else {
v3s16 testpos = pos2;
MapNode node_at_pos = m_env->getMap().getNodeNoEx(testpos);
while ((node_at_pos.param0 != CONTENT_IGNORE) &&
(ndef->get(node_at_pos).walkable) &&
(testpos.Y < m_limits.MaxEdge.Y)) {
testpos += v3s16(0, 1, 0);
node_at_pos = m_env->getMap().getNodeNoEx(testpos);
}
//did we find surface?
if ((testpos.Y <= m_limits.MaxEdge.Y) &&
(!ndef->get(node_at_pos).walkable)) {
if (testpos.Y - pos2.Y <= m_maxjump) {
retval.valid = true;
retval.value = 2;
retval.direction = (testpos.Y - pos2.Y);
DEBUG_OUT("Pathfinder cost above found" << std::endl);
}
else {
DEBUG_OUT("Pathfinder: distance to surface above to big: "
<< (testpos.Y - pos2.Y) << " max: " << m_maxjump
<< std::endl);
}
}
else {
DEBUG_OUT("Pathfinder: no surface above found" << std::endl);
}
}
return retval;
}
/******************************************************************************/
v3s16 Pathfinder::getIndexPos(v3s16 pos)
{
return pos - m_limits.MinEdge;
}
/******************************************************************************/
PathGridnode &Pathfinder::getIndexElement(v3s16 ipos)
{
return m_nodes_container->access(ipos);
}
/******************************************************************************/
inline PathGridnode &Pathfinder::getIdxElem(s16 x, s16 y, s16 z)
{
return m_nodes_container->access(v3s16(x,y,z));
}
/******************************************************************************/
bool Pathfinder::isValidIndex(v3s16 index)
{
if ( (index.X < m_max_index_x) &&
(index.Y < m_max_index_y) &&
(index.Z < m_max_index_z) &&
(index.X >= 0) &&
(index.Y >= 0) &&
(index.Z >= 0))
return true;
return false;
}
/******************************************************************************/
v3s16 Pathfinder::invert(v3s16 pos)
{
v3s16 retval = pos;
retval.X *=-1;
retval.Y *=-1;
retval.Z *=-1;
return retval;
}
/******************************************************************************/
bool Pathfinder::updateAllCosts(v3s16 ipos,
v3s16 srcdir,
int current_cost,
int level)
{
PathGridnode &g_pos = getIndexElement(ipos);
g_pos.totalcost = current_cost;
g_pos.sourcedir = srcdir;
level ++;
//check if target has been found
if (g_pos.target) {
m_min_target_distance = current_cost;
DEBUG_OUT(LVL " Pathfinder: target found!" << std::endl);
return true;
}
bool retval = false;
std::vector<v3s16> directions;
directions.push_back(v3s16( 1,0, 0));
directions.push_back(v3s16(-1,0, 0));
directions.push_back(v3s16( 0,0, 1));
directions.push_back(v3s16( 0,0,-1));
for (unsigned int i=0; i < directions.size(); i++) {
if (directions[i] != srcdir) {
PathCost cost = g_pos.getCost(directions[i]);
if (cost.valid) {
directions[i].Y = cost.direction;
v3s16 ipos2 = ipos + directions[i];
if (!isValidIndex(ipos2)) {
DEBUG_OUT(LVL " Pathfinder: " << PP(ipos2) <<
" out of range, max=" << PP(m_limits.MaxEdge) << std::endl);
continue;
}
PathGridnode &g_pos2 = getIndexElement(ipos2);
if (!g_pos2.valid) {
VERBOSE_TARGET << LVL "Pathfinder: no data for new position: "
<< PP(ipos2) << std::endl;
continue;
}
assert(cost.value > 0);
int new_cost = current_cost + cost.value;
// check if there already is a smaller path
if ((m_min_target_distance > 0) &&
(m_min_target_distance < new_cost)) {
return false;
}
if ((g_pos2.totalcost < 0) ||
(g_pos2.totalcost > new_cost)) {
DEBUG_OUT(LVL "Pathfinder: updating path at: "<<
PP(ipos2) << " from: " << g_pos2.totalcost << " to "<<
new_cost << std::endl);
if (updateAllCosts(ipos2, invert(directions[i]),
new_cost, level)) {
retval = true;
}
}
else {
DEBUG_OUT(LVL "Pathfinder:"
" already found shorter path to: "
<< PP(ipos2) << std::endl);
}
}
else {
DEBUG_OUT(LVL "Pathfinder:"
" not moving to invalid direction: "
<< PP(directions[i]) << std::endl);
}
}
}
return retval;
}
/******************************************************************************/
int Pathfinder::getXZManhattanDist(v3s16 pos)
{
int min_x = MYMIN(pos.X, m_destination.X);
int max_x = MYMAX(pos.X, m_destination.X);
int min_z = MYMIN(pos.Z, m_destination.Z);
int max_z = MYMAX(pos.Z, m_destination.Z);
return (max_x - min_x) + (max_z - min_z);
}
/******************************************************************************/
v3s16 Pathfinder::getDirHeuristic(std::vector<v3s16> &directions, PathGridnode &g_pos)
{
int minscore = -1;
v3s16 retdir = v3s16(0, 0, 0);
v3s16 srcpos = g_pos.pos;
DEBUG_OUT("Pathfinder: remaining dirs at beginning:"
<< directions.size() << std::endl);
for (std::vector<v3s16>::iterator iter = directions.begin();
iter != directions.end();
++iter) {
v3s16 pos1 = v3s16(srcpos.X + iter->X, 0, srcpos.Z+iter->Z);
int cur_manhattan = getXZManhattanDist(pos1);
PathCost cost = g_pos.getCost(*iter);
if (!cost.updated) {
cost = calcCost(g_pos.pos, *iter);
g_pos.setCost(*iter, cost);
}
if (cost.valid) {
int score = cost.value + cur_manhattan;
if ((minscore < 0)|| (score < minscore)) {
minscore = score;
retdir = *iter;
}
}
}
if (retdir != v3s16(0, 0, 0)) {
for (std::vector<v3s16>::iterator iter = directions.begin();
iter != directions.end();
++iter) {
if(*iter == retdir) {
DEBUG_OUT("Pathfinder: removing return direction" << std::endl);
directions.erase(iter);
break;
}
}
}
else {
DEBUG_OUT("Pathfinder: didn't find any valid direction clearing"
<< std::endl);
directions.clear();
}
DEBUG_OUT("Pathfinder: remaining dirs at end:" << directions.size()
<< std::endl);
return retdir;
}
/******************************************************************************/
bool Pathfinder::updateCostHeuristic( v3s16 ipos,
v3s16 srcdir,
int current_cost,
int level)
{
PathGridnode &g_pos = getIndexElement(ipos);
g_pos.totalcost = current_cost;
g_pos.sourcedir = srcdir;
level ++;
//check if target has been found
if (g_pos.target) {
m_min_target_distance = current_cost;
DEBUG_OUT(LVL " Pathfinder: target found!" << std::endl);
return true;
}
bool retval = false;
std::vector<v3s16> directions;
directions.push_back(v3s16( 1, 0, 0));
directions.push_back(v3s16(-1, 0, 0));
directions.push_back(v3s16( 0, 0, 1));
directions.push_back(v3s16( 0, 0, -1));
v3s16 direction = getDirHeuristic(directions, g_pos);
while (direction != v3s16(0, 0, 0) && (!retval)) {
if (direction != srcdir) {
PathCost cost = g_pos.getCost(direction);
if (cost.valid) {
direction.Y = cost.direction;
v3s16 ipos2 = ipos + direction;
if (!isValidIndex(ipos2)) {
DEBUG_OUT(LVL " Pathfinder: " << PP(ipos2) <<
" out of range, max=" << PP(m_limits.MaxEdge) << std::endl);
direction = getDirHeuristic(directions, g_pos);
continue;
}
PathGridnode &g_pos2 = getIndexElement(ipos2);
if (!g_pos2.valid) {
VERBOSE_TARGET << LVL "Pathfinder: no data for new position: "
<< PP(ipos2) << std::endl;
direction = getDirHeuristic(directions, g_pos);
continue;
}
assert(cost.value > 0);
int new_cost = current_cost + cost.value;
// check if there already is a smaller path
if ((m_min_target_distance > 0) &&
(m_min_target_distance < new_cost)) {
DEBUG_OUT(LVL "Pathfinder:"
" already longer than best already found path "
<< PP(ipos2) << std::endl);
return false;
}
if ((g_pos2.totalcost < 0) ||
(g_pos2.totalcost > new_cost)) {
DEBUG_OUT(LVL "Pathfinder: updating path at: "<<
PP(ipos2) << " from: " << g_pos2.totalcost << " to "<<
new_cost << " srcdir=" <<
PP(invert(direction))<< std::endl);
if (updateCostHeuristic(ipos2, invert(direction),
new_cost, level)) {
retval = true;
}
}
else {
DEBUG_OUT(LVL "Pathfinder:"
" already found shorter path to: "
<< PP(ipos2) << std::endl);
}
}
else {
DEBUG_OUT(LVL "Pathfinder:"
" not moving to invalid direction: "
<< PP(direction) << std::endl);
}
}
else {
DEBUG_OUT(LVL "Pathfinder:"
" skipping srcdir: "
<< PP(direction) << std::endl);
}
direction = getDirHeuristic(directions, g_pos);
}
return retval;
}
/******************************************************************************/
void Pathfinder::buildPath(std::vector<v3s16> &path, v3s16 pos, int level)
{
level ++;
if (level > 700) {
ERROR_TARGET
<< LVL "Pathfinder: path is too long aborting" << std::endl;
return;
}
PathGridnode &g_pos = getIndexElement(pos);
if (!g_pos.valid) {
ERROR_TARGET
<< LVL "Pathfinder: invalid next pos detected aborting" << std::endl;
return;
}
g_pos.is_element = true;
//check if source reached
if (g_pos.source) {
path.push_back(pos);
return;
}
buildPath(path, pos + g_pos.sourcedir, level);
path.push_back(pos);
}
/******************************************************************************/
v3f Pathfinder::tov3f(v3s16 pos)
{
return v3f(BS * pos.X, BS * pos.Y, BS * pos.Z);
}
#ifdef PATHFINDER_DEBUG
/******************************************************************************/
void Pathfinder::printCost()
{
printCost(DIR_XP);
printCost(DIR_XM);
printCost(DIR_ZP);
printCost(DIR_ZM);
}
/******************************************************************************/
void Pathfinder::printYdir()
{
printYdir(DIR_XP);
printYdir(DIR_XM);
printYdir(DIR_ZP);
printYdir(DIR_ZM);
}
/******************************************************************************/
void Pathfinder::printCost(PathDirections dir)
{
std::cout << "Cost in direction: " << dirToName(dir) << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
for (int y = 0; y < m_max_index_y; y++) {
std::cout << "Level: " << y << std::endl;
std::cout << std::setw(4) << " " << " ";
for (int x = 0; x < m_max_index_x; x++) {
std::cout << std::setw(4) << x;
}
std::cout << std::endl;
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(4) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
if (getIdxElem(x, y, z).directions[dir].valid)
std::cout << std::setw(4)
<< getIdxElem(x, y, z).directions[dir].value;
else
std::cout << std::setw(4) << "-";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
}
/******************************************************************************/
void Pathfinder::printYdir(PathDirections dir)
{
std::cout << "Height difference in direction: " << dirToName(dir) << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
for (int y = 0; y < m_max_index_y; y++) {
std::cout << "Level: " << y << std::endl;
std::cout << std::setw(4) << " " << " ";
for (int x = 0; x < m_max_index_x; x++) {
std::cout << std::setw(4) << x;
}
std::cout << std::endl;
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(4) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
if (getIdxElem(x, y, z).directions[dir].valid)
std::cout << std::setw(4)
<< getIdxElem(x, y, z).directions[dir].direction;
else
std::cout << std::setw(4) << "-";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
}
/******************************************************************************/
void Pathfinder::printType()
{
std::cout << "Type of node:" << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
for (int y = 0; y < m_max_index_y; y++) {
std::cout << "Level: " << y << std::endl;
std::cout << std::setw(3) << " " << " ";
for (int x = 0; x < m_max_index_x; x++) {
std::cout << std::setw(3) << x;
}
std::cout << std::endl;
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(3) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
char toshow = getIdxElem(x, y, z).type;
std::cout << std::setw(3) << toshow;
}
std::cout << std::endl;
}
std::cout << std::endl;
}
std::cout << std::endl;
}
/******************************************************************************/
void Pathfinder::printPathLen()
{
std::cout << "Pathlen:" << std::endl;
std::cout << std::setfill('-') << std::setw(80) << "-" << std::endl;
std::cout << std::setfill(' ');
for (int y = 0; y < m_max_index_y; y++) {
std::cout << "Level: " << y << std::endl;
std::cout << std::setw(3) << " " << " ";
for (int x = 0; x < m_max_index_x; x++) {
std::cout << std::setw(3) << x;
}
std::cout << std::endl;
for (int z = 0; z < m_max_index_z; z++) {
std::cout << std::setw(3) << z <<": ";
for (int x = 0; x < m_max_index_x; x++) {
std::cout << std::setw(3) << getIdxElem(x, y, z).totalcost;
}
std::cout << std::endl;
}
std::cout << std::endl;
}
std::cout << std::endl;
}
/******************************************************************************/
std::string Pathfinder::dirToName(PathDirections dir)
{
switch (dir) {
case DIR_XP:
return "XP";
break;
case DIR_XM:
return "XM";
break;
case DIR_ZP:
return "ZP";
break;
case DIR_ZM:
return "ZM";
break;
default:
return "UKN";
}
}
/******************************************************************************/
void Pathfinder::printPath(std::vector<v3s16> path)
{
unsigned int current = 0;
for (std::vector<v3s16>::iterator i = path.begin();
i != path.end(); ++i) {
std::cout << std::setw(3) << current << ":" << PP((*i)) << std::endl;
current++;
}
}
#endif
|