Linux内核始于0.0.1, 代码行数分布如下:
wc -l `find -type f` | sort -n | nl (序号 文件行数文件名)
1
1 ./lib/errno.c
2
3 ./fs/file_table.c
3
4 ./lib/close.c
4
4 ./lib/dup.c
5
4 ./lib/execve.c
6
4 ./lib/setsid.c
7
4 ./lib/write.c
8
7 ./lib/_exit.c
9
8 ./include/linux/kernel.h
10
8 ./lib/string.c
11
10 ./include/linux/mm.h
12
10 ./lib/wait.c
13
11 ./kernel/panic.c
14
13 ./include/utime.h
15
14 ./include/asm/memory.h
16
15 ./include/const.h
17
15 ./include/sys/times.h
18
16 ./include/sys/utsname.h
19
19 ./include/stddef.h
20
19 ./lib/open.c
21
20 ./include/linux/head.h
22
23 ./include/sys/wait.h
23
24 ./include/asm/io.h
24
28 ./include/stdarg.h
25
29 ./lib/ctype.c
26
33 ./kernel/printk.c
27
34 ./include/ctype.h
28
34 ./mm/page.s
29
37 ./mm/Makefile
30
38 ./include/asm/segment.h
31
40 ./fs/ioctl.c
32
42 ./include/time.h
33
44 ./lib/Makefile
34
46 ./include/sys/types.h
35
50 ./fs/char_dev.c
36
51 ./fs/stat.c
37
52 ./kernel/mktime.c
38
53 ./include/linux/config.h
39
53 ./kernel/serial.c
40
55 ./include/fcntl.h
41
58 ./include/sys/stat.h
42
59 ./fs/truncate.c
43
60 ./include/errno.h
44
65 ./include/signal.h
45
66 ./include/asm/system.h
46
68 ./tools/build.c
47
69 ./fs/fcntl.c
48
74 ./include/linux/tty.h
49
80 ./include/linux/sys.h
50
84 ./fs/file_dev.c
51
86 ./fs/block_dev.c
52
90 ./kernel/Makefile
53
92 ./fs/pipe.c
54
95 ./fs/Makefile
55
96 ./Makefile
56
97 ./fs/read_write.c
57
99 ./include/linux/hdreg.h
58
102 ./fs/super.c
59
135 ./kernel/exit.c
60
136 ./kernel/fork.c
61
141 ./kernel/rs_io.s
62
147 ./init/main.c
63
157 ./kernel/asm.s
64
158 ./fs/bitmap.c
65
166 ./fs/tty_ioctl.c
66
175 ./boot/head.s
67
185 ./include/linux/fs.h
68
188 ./fs/open.c
69
199 ./kernel/traps.c
70
216 ./kernel/sys.c
71
219 ./kernel/system_call.s
72
220 ./include/a.out.h
73
222 ./include/termios.h
74
227 ./kernel/vsprintf.c
75
230 ./include/linux/sched.h
76
247 ./include/unistd.h
77
254 ./fs/buffer.c
78
254 ./kernel/sched.c
79
264 ./mm/memory.c
80
288 ./fs/inode.c
81
306 ./fs/exec.c
82
306 ./kernel/tty_io.c
83
329 ./boot/boot.s
84
405 ./include/string.h
85
409 ./kernel/keyboard.s
86
413 ./kernel/hd.c
87
550 ./kernel/console.c
88
678 ./fs/namei.c
10239 总用量
共88个文件, 10239行代码. 最大的文件namei.c也只有678行代码, 但这些可以组成一个正常运行的系统, 正所谓麻雀虽小, 五脏俱全.
系统的构建由96行的Makefile决定, 可以看到系统由boot, system, 和build tool 三部分组成.
boot 部分位于boot/boot.s, 从Makefile看出它由as86编译, ld86链接. 鉴于as86编译器的使
用普遍性较差, 可以考虑将代码稍作修改使其用nasm编译.
主要的改动如下:
1. 常量定义: a=b 换为 a equ b.
2. 注释: 由 "|" 换为 ";"
3. 段名: 由.text 改为 SECTION .text, 注释掉.data, .bss等暂且不用的段.
4. jmpi指令: 换为 jmp SEG:OFFSET 格式.
5. .word换为dw, .byte换为db, .string换为.db
6. inc xxx 换为 inc word [xxx]
7. lidt xxx, lgdt xxx 换为 lidt [xxx], lgdt [xxx]
8. mov mem,reg 换为 mov [mem],reg
然后用nasm -f bin boot/boot.s编译生成bin文件即可.
boot部分行使boot loader的功能, 从软盘装载system部分到内存0x10000, 然后再拷贝到0x00000000, 初始化为保护
模式, 跳转到system部分执行.
System部分由boot/head.s和所有其他部分组成. head.s被loader移动到物理地址0, 然后初始化页表, 1:1影射前8MB内存, 设置中断向量表, 启动分页机制, 然后跳转到main().
Paging:
pgdir: phy 0x00000000, 4K length
pg0:
phy 0x00001000, 4K length
pg1:
phy 0x00002000, 4K lenght
only 8MB mapped, 3 pages used, addr: 800000
pgdir[0]=0x00001007 (present, rw, user)
pgdir[1]=0x00002007 (present, rw, user)
pg1[1023]=0x7ff000
(Last 4K)
pg1[1022]=0x7fe000
....
pg0[0]
=0x000000
(first 4K)
补丁如下 (base64->tar.xz->patch)
/Td6WFoAAATm1rRGAgAhARYAA AB0L+Wj4O//NyhdADCLiIbT19MqZQolIwjL
pRiPutAOgvvozyH2
AX7DsG1AWNAtH4vm2OxNx78p 5EF6YIAkn4kSTD7MdUkE/cVhcpioVR5DJA+2hauysbkWIopkrirl
44RqKuYpryGbg3QRncmVTiz4 3RSv8jm4M6WD3Dm8jRJtC4P1
GdDw9i5qEqEABBOEVDI716N3
GpPz
Y+7jMOudbAyBSo90z8oItcQ2lX xY3kQn6lgy707AQ0EozcZbfK
8N650faPgIzIrSLv6lLFr4M0
dm
Dirf2/NjS0Wegeer0jF9lsUQhtq3Or zyfYfr/xjJ0mvK+w8PnN3Kh2U/iUFcibUD/ihVXVl8EYBZ
48rSXvdRn1tMPJXIRXW+jNPPOWUco6zXDnzaz8GJ5Gon TKqw+qyOuqVWpz5dOMlO/YXh+BBNvvqk
Gs5DPJ9WYxDYqb6flwtRDxiq YgV4QtBfvwpnRnjhOsjbcuDT
HS/mJvtdWTEQ6PChijp6B1nfXiL
H
NaSwoDSDFllryHWLe+6n9wbtMaJOECal8uYnFoETWB CQNfb7FUgCpmbC/liry7WYCH63g+LtP29U
dqdO+x0Bsu0zXJQXjhPPULGoMLxNC xSFRiKpmbMdmov0MMA564HBm
NvBnwb73NAmTpfnVbfarMkg
fTwWQwFKIWAUl2n4FnPmLj5Q FE3RxGAzQ9pl+TScq1Dcj5LL0+yy4UgNt5ZSbP/JJ39L1b16yHC1
sfV100DqKyigbhhKln5o3B2v AHAo3MNVE+OaFNkmmniPQg13S0LLT8YO4+gmQQcRnNMM4LF/t+8C
FXVS60l5tA301cbHHeVeW1xI WJyXSKoDilIWm4zxEwlteQyT
C1Vx0GY02jiyi/9ZcrLxXUHq7oQS
pBDO6PS/ck0FO8qAi8LwKylpnDg8WlHN Ti8Xqnwu0TucI5E7Xodje8Xh
9hRz6kQJD4AKkT+vJdk6
Ltu+v6QtH3Z0hHK75X6MNUEmvwOs QksFUi9tAg4LhMaZPXs/oxgT/NHCDFf167iZC6ZQBsdd/K+p
vimHL5u4LlnWE1ukdyigqAhQ l25y+4+ALMYaEdgZ/L3pQhQPAXZXYDkYcZSuT3l9i
ir6hPHakYQ+
NBih+wNzqsPYAESrpRH+eKMj300uCGt1wZ1VgghcmBJa RtOT50HGGv4rOSe6XyLwTyXC
3F/Gii9n
ioo6tgOfN/lxDvaYkzjHtcRFoXFwCtlcNf vZ78dIkZnHxRsEf0oXCqivaf
X1ZC6lKcMBtlroFuA+
6kyG5/ougpLNJeo4b0313ELqxn9nVx KuyBJkfGFYlSOsm9U9jq7Nuv
paYevZI3vDv6wNBcro2jNu
ywgtA4S/Zu5mSJ6GXulIbs+vRMhX1upfdkFpoxcUu4Gto87 WcbXSbY6xKTqbciwbBiD3kj1
MWRsh
FFjDTdnmvEH3yOsoRUp7SOZq dyZyLYOSqI76ppYrSL78BxEB
PZPguoeBDTgBZafuWcA2Ej9T
WnAd
F3arDf1CkW8E7m9zXxlQekQd 6HizVqhPkqzSNP7n+7yiUycsx5VynyS7Xku/6UXGmq5jlf4OcRFk
Eaaz2aiJItSjpkPY0Szh8+eQPQ19p70VlZ8i7+7jsNKThOAlkOpVfTgbfe410L vv40KJSpXsDtX4
pKDnrKlF9w2MdLo/7XOihZ3es+lsE6GMICRLgncl5c+5NwBWS1XLswB27m8LU2SeY8r pCwh75jXA
FvITT2xnUjyM5fvK9VUqq0Bg XTF5f0lPVKYc1FC0CLcwGhaZ
IbMJ5B0OCE7pD/6eFWqXWFc403Nt
PolGw3v8qvblTVyktR8kWxgx syYc5TjMElcHZwMyeTkMOnFb
Fyrabl3mIKWztTLDBer5ZHFu
OTzo
Qz3hMuwMOK0JraR8mZQgaW9l 2Baw3Y2Q8X5zv51ct2hUaLPs
UuV9c2LTuCB4PWENeZuIxSzF
ooVG
d9k+QTFau17vB4FOomB1udB/xfaZ6gbyc7gKBbiTmGZyeFlD tOop7YespdOCnYI5jfE+/tYhaKNf
mHrSRSbaCApeaMyiv7xYmlGd OE0dLSvq+nMyavFAY9frPc9Z4T37a7Zte
38AowJSJc/9esDvKd+/
dDqWBM35b9OpiJwWqVgI1251 1DNP0Pf2xmqdzxE29lB76l1S
2z4A26RK4kcodJnPa9Gu0h9I
bxJY
FnRO5Fx6RIAxaFbwMydu0SdW 5d9jpKm1synVh/UtrJA1L2CZLxGKRFzqT+ZXUpEXeiyNKA0F/yZO
YubC0FBeoQOf32RbdBUy3aiO 8KWj2Om0KEjX8SAb8hXH16nU
UTt+icOnPJLwZq8zLnj/zDISunVr
7k1CYhJqKE1VCID3/dyPVduYpMxkgiuHcQhkl1Rsy cN99DFCJV3YG0A4YDG1AoYGY
5LTHzz0adIo
8eKT5GsyBjv1Nz7WguDW+HjjwwS2mbURBLDJWw8uq0yu3 WFmdKzs4F6B59ZLQ0yLfurE3
2Qhr0sR
SZ2kPbvQE0bvt/CMSXmGYK3rkbGPyd3tF1TsW0 ksOlwWPBXBqD6L2stmu2K8ID
NjXKohvixlQjbs
SdGH0J6FQ/1UdL/U8mcMIb3sNbNxPl6gmfTZxoD 78VO1YtDYyA90QbERDOEwKdw
SJacPt9HYnhPP
70jmth4EBkz9w1AayDf3Lx4w 7emq9K6urYfby9Y75/wLzf/T1wYJ5ZebJJCRDmfYZ5eXx8c
rLnHq
ybv5GdZh9WE39iXf12rDr7UZ 2O4emjthdrEkL3p9uSwHWRqq
V15G9l0XbI+HxpR0ntKWpu5eIKFd
9Ozjh8zljSGTZNg6PSO23Gds CGFeUvtPoc5CrM9DGZ83gE82
n4Z8mT4OiOBfkk1++tLSI2kFgmur
62kFzSfWlpn9PnAT6JOhr3zB dgcEO05cLEbCOnbMrJdGrag8
bljJdrIzc5OOfLvS9qOwku/1aeHa
Pke2/OBWE+L0kysa+bbcXjFLYLeQFmfG9woD+zg5KrpZfGFhcrDoPCUSejOox l+KRx/Hvr0Wyjg/
V3cvaFnKHK+XsI2TaZUrsiDTKmR75O9xoEv JgJawX8aODQTmZpcvcYBORZ1
moWWRR4GdETLVzOw0
of+u1v5Kuc41QAldPySWI8uThP8 VTX6i9v0Vhv3HHPqNuV83Mqu
XduNACZKWVUGfBlzUfTTXxFn
K
dcRZEd3eCTYmRieUU5AxHfNk kmY2/r5GQKdIaA8uJ/yylxwcj8JYklgA2NqBqigg0B
VOC0a6ByPL
Yh0iC4JMDW2HDBuoaHwJG3ux tprodVj3GzGf+XiCK1TcqbHS93HLsX6uwkx2n
YOnc9DCDp7b/nsK
Tp/5Je2ktuBL8A/RQdENaEEk3oxXwymJFOBDeHL 9RqVE+S/nv9wxlPKNHzd9fC4sk6NlqTf
07+QF
S+tQPwAcXxWZeM1Mn+b9jNXdJW1gimd76XbsEFOeiW PAP49+jKEn3NjeGSbYkkjxfWp13MBN
+Gna
a8D9pXufaooIXcXmWhFCRTxe 9b2c01MHeh5HxKYem9l3SGSp
DIbSBphty3lcxebsFbQ3dOm9
A6W/
0BhEIj98JdN2DEb3oCZxp9O8 QSwJjtt465FjH4xKimxQNaoT
mnITkY6QOAOsl61YCAoMXrBA
KHTy
0pYnV7FYpCr+Ow628/kwGTMnV5AxBD2k94A6rgqW8x ohVQnp/6/xVu+ADoHFpvOINyufPlECOu5G
YofUaE6hozBwnSEPXawrGsvA Q1I98aW+rLTd79Y1ItdEHdJf8qYDflkP
+LoiLPEJudRG+nWah5pj
J0PlYIipt4U/+WFM5d8sSx1RHj0vw4vsWj0R/dq1RdqISm8N772NTuOVzd4oy kFl+CI7MVot8HnL
DjiLBdsxrtwNF6+nJXSrH1Ap3b/j2c9xKvRW+4VGZp1qvve/NDxmiCum5EL2sPsoXFhWDjnu GP2T
SiXRBi6gT/aPqZlhlbYN5gL5qEBL4MMm8M 0Guf8wHhd2UtxOjB5iCl9PnC
qOArKagUjqdu/gxgYN
ajbfisQN/gqsXEfsYkv849InMHgMn+5Kwu9tCQuDBm1s3IUh314lds m0fGQavAXsPEu1w2jmX/AG
W92ayw6o+FmsKcWhomYWcdBaMj/1ebRzX7tVXXTtop3g37Y6Tvm Ag17mjm1hOkQ5ZuKMQP2RHkh
l
xkZsQ5W8snI0Q0f08d4QBHGk pzgeIYJr2Xn7dz2zQy7+sj6z3ZgcZvEt/6XY85aQjaVq1Hri3QoA
cwv/Wu+w8+ehabgDBrmgzqz9845zXb6eAm AAsloMnI3eW/qZfwEfhH/BUOvHI5oz+Fgt9By8s+lF
IAEp5KFeJ5CSIf7VfV97Q8BS kjYbaGXNp9id+8JLtuB9ZWlZrE1/v/OSoD9ST9cxVQnzp7fBfgLz
/A054/eFpA6MbQVjZX9iS154FgOh7e tGDJUt0G0IiOfr9QBSorSctC
u/fzGZuY/SquOHoqNYUGZj
AasRp3t1ZYDnEDKSwG9lsb8k pAYdR4eCdP3xLdzjxa82HE8q
YF5QMg98vzezJp+qwHXRyKDSE2vH
zg49GHYMwBBK+R2V5f45GK8b/fsIu4VBoXb/UXjHTNozYSCxtLgalAD2V7VV p2PBLx4Fq16py4b/
708dQ428YSc1uKQl6BeOqWMA tc8mXU0cS1tQSATZ6aTOKtA7
zLDGym+ajPsd0wnOLr/5Uztt17k7
WNYUyqt4R3LXYFNWYbNVExIk yBcz8naw6D4Re0n6FsoE+nRN12oe/o6XTTedzh8/npWxx00PZ1QN
h9LJlnfKRZNKSkr3MClTQwVQ IUdwRvAdv5x4xxh8Iypcatn5
Fh6CY685Gj5+wKUm+Ynztbs/7PoY
sOdF+lSavHW16MEyfjCrzWPRpHk41 LaDkST3aPK2TaTWHO6o90t0U
mEyiURbM/xht83sUYFJNjYt
cwhOqKi8qegEIsS6GBKCE7x7 33GnDhH1CXCzQOuzpOf5JG1K
IjsF1wmps3RwIsL+uDrxd0XXhvW7
/wQuGdlbItf3+CK4jSAqRCi3vW6O11KiOqLIk SOI0xVn0OJLcNuOtvhZMA6AL
wMoPQ7Ep9CMrDUg
df8ZXyz6Ev1wDJ7P9fOpYqF+neRFejZDizxoArATk6KX+rrW9mT04I9dFqZ1qmEagKulK WTEZMwD
nvmNdP3B9TtKmdp9vQGGtXj7 WbELNP0Z8i6my6LmU2qq4fGO
Iu4gFhF42TRZGBgNQPSqy0FY
3Dny
B15XLfYHw1MLlo7ycE1B1e10 4jBM0sS4voswyfkpEkzP1Nfz
NL/fg8ATPNh4BSFpZbV+42LTGR4+
GWzeqA24aBEZEWMDKyk06Szi o6B4m2wwz31Aycxkz9C9sLdU
HuKtNC0/dI96MArZY7umKqQO042V
mGJWobAlS0ts5i9iiF0hlRIn fCZ4fFgeltw5bGTalhDkSmsH
T/xD44zhajEQbDriJgGr46Jku3
a9
uoRAAls9l04z3eiAI8NVWEbr z9sh6z03iRPkok0wPn7gULi3
nFcozUH3zz2bT37glheQi0Ad
GN8Z
/zml+704+6CeWPLUO26zj7eye8alR05rn aFgLAiW8oqz2acFM2fj0P+oI1viD5Ge0BajVpr66uYd
WdBWjDCvuyNTycKs+oXxjpzrasb1nnqbIqdR1Y35V CKUBjPalWHEsKNFHQCK0d/d/aONs+yCnWKT
G0eF6/zPHQqzLOpfJ6xhvXMUhcKJi9 5HyyTjxoshnKM7quYhXX4hBN
hkaHFvAVzlkuZZMHFdrtSI
YoSbZHzHUuKzlF2ksyWGqHvk nS1Sy32ZvuDxlZK2osI/MAiEZrl0yX835zSIMW9nu2J5
6qxZhNL1
NEHwAUIOLvJ37MW2gRKPgvoM Xd2y8NRSTvYThVG03bf93dJH
TM/Aw5bgKENKgdcTIfnlsmiEzi+V
YY9jNnhKlxoAH1shT2UaCOpI 70BA5W09PfRekbySGGIoXP+xaJzYR3/wd31iEx2DiEsSj1N8udJN
iO+eiflm4zTRlkgVImn52/RwVAPb3iZoHFxaTikMeNl08g viAhhoVDERWPWpGOTiPXjS56
pjmy+7
E8hPIFxxRkH2HSCQwWzeJyxT uUjZGYQQO7HiRwBJMdPoQhtj
XDTU27W9CfqSXJpwTBA1C3lF
/+Yb
ousXayURQya2qimFAK5xI5g6 rbCPVZEIUoZCo2XjIUI1UfnX
zVGWd4Gnwp1CjxUAIbsgafAA
h9vv
a3iiAv8cpCnpEGHLTJuCLpbH UslRGsS+mQ3GLxJyaqyYFo63/9NS4IrVXQVl/y7SSFhdn7xzA1jW
eq339M0m2viHXiHvvumyDXGQ joViP8o7ok3q8o3zcsDaSjAu
EY+N2Q61zjOCtaZpkdCzCkpgkQh
y
5eEaG1/XR1MnCFc801ws9PzoJk5Vs9S QEoFW2dD1fhtiDtTAG1de9Wl
v9wYGjaeimvY2kTKruRR/
ufoDxHYNu/TNHKha8iULJ0oEh8WG6aZ1fz Oz2RyPbG79ij/hydj5ZSMv2flVLqYqJzn2ndi
EBIpr
L/xjgYTxBWyzuMyaZsPDuCg3cM vVtp7Ck4JjMtcap191SfgQmJ
8FfTDEy/pmPlQUWwvoWqo0HpQ5
JraH7z+rgkfH7wgoz6jgSVDqy5wTV+z0dypcd64QMgYmsT5een1UAw 29ncInyri7/dHskkBhWbSE
tqJVe0Fs8oPYesc8NI6n5sao YbrRiS77GliZAaPt/WmhMGgi8qGPvo1PapfmyZDRU
HxHNIBWj2/J
kkaC4JQUH2r96k/DH/5angdrviPvNjZgbwYisvSf+apPiiXN+pJyN8DB/q3LOfcg9R8vG+9FjqWl
9jev5MjXAeXU5g2SGM6lTwps N0nSmoWNxoWsKTV3IkH3MHEA
ePTGNhhs3sC0+6uNDo4qluF5LYkV
A/LuUZ3Eaq1K7X1+qODNt5Kc37CDoMwzKICJWo0X sqVlfIQl7SuotO5+DDEKxC8wILeaoPokYINV
YxoOnY7aebECPPNXFLf9+Os3/4hstvvZlBdwuuctLtolOP9Hs uymqvikTo4FlxO8xXzKR9VDo
UrZ
AMclKN4Pj3sdiIubROp94PD3 KACIhTlHGOWCG122cnviyuvF
G2yKyCUnMXFMU9bjNjthg9ij
Plbw
EfmYRMIaeg+N/Dhsr4vAIelXIXJ+GrKF4BvXvvh0cfe+ieMa0QRSkXys1g0f166DaMqn NzxDP/iw
kQSVjA6c3f+w1qmeRccA2SOw5r7lYupNRon dWdVo4aGJFKuUan/qUARoiPIdaPL0fwVvIcY+ZE8L
WcssQhWjUMadWJ47Vm8KjVY/FxcOpAapJ2mg0Nm3NuUYVXcp TFG1O83KICRbNP9vZ7wjUkjU
2ADh
r0NgzXAF4f6oyKaB2OJgVlF1 qIln/9v/xTTEV8sjuVxBElvWgVXt7oNq
nBTBpbOcw/8GQLAj2Fdy
tiFgo4u02Yd7WYF5zGLLFdAV TdkRhGYKbXqArNShpqLigeSF
WBBqeMx6IMUG2hPkMsRwpu+BT0N9
cFfgwNodDzLStIRxNIOMa+VGW/6e60ZIcIo68hnL1JnIe0rVDL ST1zs+HzXggfDCRdUfTY2gAosi
uJFS8OGJNcR8+P9xDXlLJxIb5N9nIWlwqUDwP fRGMWGdZ4KCRz+3MUX5tp8LO2blSdY+JGm/JTcZ
J7FoSMstA6AIKP41FCuw/eiw9fiCT8TOXn6nh5KRgDXOO npOwoIO8rmKKJis3/q+Udc5gEUZCVx2
0FgwFBEl5Lvu/F2K/fw/KKUXVcfSQdvGqDxKX2gtTjCh ORGFf5TPtTtS3+CE7yp0VEPZkI1JFc2a
WGBkCEJhh185gvSwXqD6ejUF //x4+pR/HGy5yIiqifyg2aKGs09AKOSw
mHmZN9QSU19R3Mp55pLo
NQ5sVxHoXDIJHi+f/fo289LtkbFasuF9VCcc13JBt nGX78Cy9noUneIX07iK4Onjs
eb/M9hrg1Df
BQLD4oMC0XLKHMCo9L/FGqzN5jn7ekgKZvG5ASS//RVEvY2cYBbCU7v7R5ZsOVVyj WZjNkfeLCrm
iLZEJzr+zsz6gzmEe8d4U6fiwXRA68HV Qt3qEQIqcEeSOJdxOHqdxs8K
O2HrgbYmsqUIPkUYaJS8
MYS4GdJlpcENXtIrQinvGNTU RGS9k2ndx7dJAYAu8ZBrv9ly
b4KMprVHLzPF+CBfvTlDhqx1EGzs
noc+N5GlsMSqCVpzeZmzrADEihoM Xto6Ez3x6bsh98NP5AqhKu6m
6Ms8xs2CNmekIOX1i0PZZxoo
5kuxeZyf8fGPviSUkGDR3IDR kIqmQuPJ9f0r0HG7SfkMimhi
QyUMo1ZLRuK7igyUPpYgrp+n6TSK
GWT0K/BpbON8V1j9OgEs4ohOIX+lNO5qkEfQ55e757Kh5tC1DPF nMZT1oM22t4FqCde62zuKiJX
J
roYsIMtp20v7NxXVmDNUzPtl CNyKGIVjmAM7wLih11mDcfEq
7WBERiIcxfMKYDq2A6fTcTMn
SW9/
Z/EmNwKaCQyHfEbiThaeGO4mc9 nPDAwaYfzw9OEo7fLw8Y2GGE
bOqZ2q94NB9SxRGJXfXpXSkm
LN
nGck1VKb4MzVq/fo2Oyu0xQCWR3BEM+iF0XyvNwtLoHinrrdrQUw5SB TP+OZzHOcrLJNzvUJ1oTU
20ocId30PjKA80ERqBLJoZON 3+y6AvYs73x+3dPPp/aNFPLGCbY/NNXZc3G1stfID/RDl2+XefJh
Ih+u5qk1DTsR70nkvfQLEI+piBNzUnc6VK3t8Z8nKhKMsTN cmnmWl83ZiyHlUcLhvkGJ7q+uBUzc
MLPBCXK6UVax5IYFqRGhyqS7 MntPaE+gDZthdEN6ZH7o79LOEZpWPu5
e9AAmVqVyL0hVXYvx8t28
8WA9PIVpxsIEIPx/qwb/3HPv6Q9Gu2RqHzhZHs4unWjd UL/PfEYqZPAI9r21UvXPw6XMhs0
WYQFo
4Cc9u63GTqnFUns1LXs2oX9o BzPb3r5kBW5Dr9DzhtbX5Y/7stsHeew2SPQnN3cn62zfzv2
mVQwk
k//ZfXL8cuNpVfKi7pEF3sfuVPk 1nqlapUO1X+vO9Kahc9Pf/AfkROOujo3u0yt61+yXerTk8qv1
+Au0z2csYgV+/Ux66qbq+oTK5EzBvKxKpZFeWuyN04XKd foxiapl+ZGpmma8kN/CApTxX2K85Vir
fJ2VC1NAHCpxduu+vGdYpzCOBZmSuOdxuE4cUSEp pd3Zgq3FJsBbQ6IQ7KMoEVfe
F+aG1vb0E89W
X7FNHlKJy7ush4g99YuQwiUB 1bmL9syW3ZRqfN+TouZ+XaoeKFCDhbX+jy9Af6gaDGUuhNnnrG21
mmWF7mJwyYcn2EDNEnHVTqmV vkLzTllGw40qOMzcUnmYIaOq
m5iSQppgTTNOFZoqLB2phuHb
f0ue
Z//69yMFRwOebRhSS4SJuZPk2KL IoFMsk0uMceXm2BPu3IF5kNN
cqQ4dB21E1vgoSKZdLBsxpP7
B
AuHOFf2dVFY4TuHl9L82dtut Z5BIqnUQv2JNzt0Y3yWcMCyo
OxiGnmdvyexfzUBSTeif0QLJ
8txn
1XmVTjN4WoUSaeMjk3+zBH+Dhii70cbEIWD7QFIEgcPs4Ff BnvXzgYRMryC+S4B05y0hk6xj6ViA
gs7jbsnliRLwIOBvuWWm2zdw SVu88ux6FIV+eCvD/qczf5FjW6at7/IulhGzj+d8Ys1aQ7NN+H9/
YTFGmPikZuFr3gDYI2CWRqO1 aqK7WSycz70vnIXGFuWDo/1uY9fqG5NEM26IWXhQfmaVcl
aCqFNA
Wgr7ZyAh83U08tNZXCkYKy7Z 181pB99wA5Rg5A8TRJw7j0Mq
0lwjfhU4HLHwuyK5tKR/mNWXt1IP
RzYdjF00Tjh14NMe710qY9sp Vk3akuBcCmxntF4c9RJ054T6
UgQPukgFSzZfeHc+VdSPIRBxP2ot
mlKSHAJOUTPxv41/zOxI80YE2X0ws+TElDPYnXaKYQFFhCL128Goy4 8GuuybVcL8/YKFCh/BSsvM
UHPZxE5SGM4uGMKf4h5ppuKY BLSFpyoT3ILi065w0sxkha6Y
mlb8X9DLNDdnBmnq1z+9A7nq1Mfs
xXgKRNRHLC/L4v0d3xVOr+IsnZ2qDrU5T6V/f+87MWyHlLvE6XE6O5jA5fq+yrnzES/4/oAFDgoh
2IgJedCS6qrqTvQRCG8rWHv6 P8kAz4sOojtqHxYE5pZL9t8X
TWywcGJt2JYfxvpbTmHghAwF
k6ev
trX1LFzeospA1DFiHw8vynEq ECfm2ErTf+MFu32bRbyaBHtiHpHEdL/Dy468K/j1pj4B39iPVk4U
TknbwbkD1dw78t+nTgxkv3LVCJqhuELGbrNhH9H SJb9ty2QU1Z7u1LAkA9UkufT
S3+q8RePm2cEb
HagZV6cx3eCazlb9niHDEBX/n9EGJH24ikZ48zmXJ3wzUXvw 3n44O2yLdk34dWyZgA1Duv14
aWB2
K/3a1FdGe5afo/QSJIB34kc+vw29LLlt8npwNh5/oF7EpFB7/X93Nx8s1UuGudX5hVsvPg4/oRtk
o9TE9pbQwh0rNEV7yfVlDYzt DNyeZcLtCJGyd9tDKy7WXGU1
Gk8npvhSLMMD7+UwpWcu0z3BnxKe
RAw1k7xOSuCjg5peal3KiFZK Bq9CY6A852gnW49dh9ItyIhy
0Yo1rjsJtlkKzxoB3wVJ7PXL
ipPA
68vlVdsjg90CpE2t+9xc637LeYQGtxLhz2j+poi18/2M0hb1cv2PVH8+5fpvSWeprtzfTOO7yYRF
en4SUnYbd8a+VeZEYuUk4D1BZV/5tRUFpX4ZTAE38cabqRuU8yy AXme7GFf5wn9wgmD1eOyzLdI
a
Tl5E15ExJmvzTPv5jN7phdRn PV1XMjnfoFEOSfpupujrnCnt
mxgdfhcSftcR4gggT/Ylfjez06rF
0urNeKVto1mJTZMQZ9kxL3jE 3hEyCCMGf3lKfieVN8Xkg1Zp
fUrlBtNb7qga5ogCCPdxSA9v
mEZX
sjyZlVvpG+/1XnEMac5+M2ejDxStDeXzHYOC90uoMAUG gx1BEjeabNvZXyjhzw3PqZIY
tfYGAlqy
qDXqWm4lxjmzHDVQDRx8S7kJ U5m7RsL4uwusf0u8Uf/dv+E7hgrGTpZzba8xXWcSbuEnFu
6Eogp7
m7l4mmTKcad5ej2EkEXwipOJ sZizW1QXajpcFtaZWmUT6GuO
JeygaBiOTXbb4fg+RdoI7tn31eQE
BKfFAdw0GhvcPm31+UKsWBX6qqILwLFROSmjEpWer Ni5fl/YMVIfZ4vyJRINjSNFaEwsEua
Zb4Fy
xPc9wtBC3umcP4R4b0968Tsz WqYARYkwgwRgzddixbSxjUs4
H8UiejUjNgUsuTYT9LTjm0Ns
ko8E
Td3vTwCE3eqVBt7plQ37hCTU eqm4YZ9+xJLzcFoh9nX+3yPt10UPfFAouzQLknHN1hMP
cp8Od4dh
vcaquyoq8+dbQTXnFZCKdnwyqnWkPiphPU AhshADOBGh+3ZSrBd4ci5xsVnY/T4aJmIFA9q6ymQC
XwDgTdtYcRqk65TOHuJiwFn3 XeMZMaHsqv/oT7r+GN8xQH9XZk3QCpy3rdo/vWNXz8AOuSoK8xYH
vKbqEZ2dkM4JK/Sq5nOZ/2oZUAI7uwKohsaPp6bDb5/Q3qu+AMmmkuffpl0vESQx3Pwp4pJU TH92
loV7N5KEsDMiu6j1ttN9Xzc7 dj/VOkG+dfTJv3oBGida7xnSaj8c9NWb
TzHYNTTVnJ2tfqOh9NQP
r5QI+egTgNTt8HdLauOVpXCzdHAUd ibb3umD4mTGLC6ix3hOaBbsl
cSEIQPJARe1K6EgG1trvAhH
ype9atYabZ5zUogjrO4PKQ0u 3qLW1OcLggceWoWr7IAS230G
Q5Pw8JL7HaEcvJrHSRxT1w6I
A6dD
pZ25FWtNCIXhTAVzFED8G5Kt 4IIYfA5CA0n8klv5aNOLFl2Z
EyZ51yi3UFl5sjYh5tscTAQJ
fXQR
Ks5rswI6O0l6s2t1/vNMDFpRQznwi8Ofoq9HljXzY KcEHm0k5pTN/E+B3N3kzJoaxymVqn4lD5YV
a/toh1DbdRecicI9lUF0bpcMNM 1B68ulYslwk8kkwlbDA763C4
7lKQ9J97iSVi3thEKXHWRObG
LP
dpgJwvNOm3CXnaYy6SEgSFV9 Vd9gDyFYJYFc4rAYO9WmX0/9L6mO5lNfmLrIQCkPstIYgzi
ZQbJI
MQTWB+Q/qwGax84UOFgUcXlvOoaYWyoy eTY/M32MXWd6Yccw1rbRD3XqPX5+aWoUte++NleHHrZS
ekD4qYB1BwY5Do3oTbveyU9P PRWDoJ3NQfrGh5OM8oLt1gTi
+yLhydNhDTFl8yeDO3Lg1NYdF
TLV
LFu0lgLUJLZq/HBWHvUYPtQyZkvcAbcBq0nM+oNt/4DQHWvGF8LNCjt1g3ITNiTeb j/vmFD4fN+f
rGg2sxmgLVt7/PfMnrISH/7XjoOAx/s7RzLDTBPTTInxLiG/Vji9FbQZE4hAraQHkRPTyYVt 2WkR
4iApxi9J6cuKLWDcWaV5sz1X vXp3UC3SIqQCK4CeuMi1U7gE
eayloIEaeOkLBgZ9U0HriAje
IoZl
LA9v9gxe75qKQCmUtL65J/fZQwxYhQH4lXCXgogPdrjd3f G2GR1pgkotmtcKqBw3J7TPIj
IL8lmJ
yd4zVQ1utQxSmUQOa3ZFhWnH 0N2kmzThYGVWWwewG+znMp8GrUdQ6pJDPvn/GtnLj45+65m2a/Ha
LwaqdTejgIHyOm0de8mE/xLYf4wZy00cA7SPIRuq5oB2f rAg35WtzEtCI2WH1f3peRrMY
+MYD9JB
zmWhPaI8eXk0ZdE8oJVRsxJI MqDbgjLLvhypeS5urolthgcg
wWa6rXB+N7gqVcsZBe1tgTB4aASe
m+LHX1n20w7XbanuZPDfS12HKc Hbss6LLHcpTGHcr/s5e3jJ1yidquIyWuLbug6nO2
6OjfS1/ZPs
Ph/ZHLnVCuJGukrmkv+wxZvkvSQ1IyoxhObx9wvBHoK 8yBUEqKZM42/cQqqSebUgAgX6oC4yYPQt
J7wRx9WAVasxigYM5cRlWkRH kAR3I5mAXlMemluPOnwNky2K
rOPVXbJvEBaPaK8vTJChAiAM
9jsk
I24u+srjTj3lF6IYPCyn2Znt+SynABscNstBrg8Wxjbrl4yH8 vKQseZphIZHvrvHvdeOhOM34
3Ns
gguGNTP/SostJF3t65HjVaTeOAEp9JAP LU/CVG05t7GGUldhoHw23tuhrtC
aq12hV7vVmMSF0MKi
3xLTDHeJgYfyAenrweQ92eBk r5Yof7JuFl0h4BBpB2NRpUWx
vKZ8CA0x0zTkDFryraDxjFCk
dM7c
wg2D6ZK/BP2B3Yj87Tqen1JxopDcAEi7 1EPf7Cs98mjPKe8gUZyDF6py
oUSbC9mZZ/2V2gq7pjTc
ktajq6I5Y+q7VtrdnQBMNzkZdjFAoc3u07 MJTCzcYTSBua2Ge6ey5vFg2c
0O2FIO1Nr1QVO4ovjm
YPd/8I40iOvzoy1wRX4uV5GGaOjP igqBsZK0vkhngk1BzGOI8gVO
zcBBu16hh5HDq00zl+/Az1Gr
COmSuTjyiFQSEubAWt0/aB6Dcd4pjs2Z3PXmHM2G7tHw ZKl29xgLWXXpPbsRuC8sQ/gqJsQzF0YU
0VF84PCdTquih+ztf8RariKAcojfPbdqD3+1jyikHneyRe5mSv0LDe8+B/xkpUybR68Bf9iJ+23a
4Y7plwP3g8t4oR0f4U4wnKzK uf3v3YexpHojoWvqc+e/aApPSQn5+SnwbTy9hutOylKuqtQyi4iU
3n1xGw/BdkGeu98HXPXxMf98ToFuZOk 4d4Hb3SDocN9wKmXoG9lzzAV
QsktSyLfq3gLaeXk6VEbX
xxIJGgBPThzvRXbwOMOJ1y3t 7eURhpCPfmWyQNWfmhuZyWhE
MYA+ewRUvZyO1jXGk+pe05/Qog6a
xjiXilpB7aLC0VBHQLjTP4nU 4sKSyaTg3P0LopkGdo1MTV2s
RkMEsf27wPuEbt+SgIZxPthrMkO4
e7pUEM8whD98SIaFaBeju6pc QMxa+Tep4WR4jKSYDtD5PlIwRYt1s
Vax7OizB/A6roH26ZVroWVn
G8TWiKXqE/Jpl4Q1NOi0bIQTexE3F2s2Df +PPWwitYt3FNnk9dUM+wB34+VYw/zeABMMBYD2OvGe
6bm75RDWU0k/yKl89PGbzjNKi3izEDeyBVQd 0lrzvLJdH/gPKTdFMHF828vbiqKMWznlTc
lNDmy6
o418nRv4NJL45pAAyE9YxLyr hXfkecH3AOKtVLyHZJ0gQWFe
I+HpPcGIOIgkxxI6ytpOAtuCvd
0y
ZKVG6KXd00SaCHAE/Udlc1jgDDdUOriYWM03swsqu NO3VoAaudF26TfFC8h6Fr+lW04z0i2jCltv
pd0AdG46ii8asIyMZBCd72sa SRDEMDI4y152pQVzlJBI2MTz
vmUczcHkQ71OHbOjNVl+5+Xf7JNa
5gpMz5VSsCm7Y1JGSzB+GK8DSLaeve2EY01eVdvKLCKz H1Jh+nRfGKgjEp8G1e1xGlW+0aUQLccJ
zuvLNN0DoOCQLncJtMZUTdjH KtwwaT6QW2do22DduKZrxMCm
f9+EcWQ//Ln9lb1SNsldUJc4zAEs
bKRfsGyWsaLArnhFmMJizKCM k3tQvTw2+5SGWxNXm6uSi5ywJfgG3nQmR
viOgRSHnISIWiFz1bh7
TCMGDZV/IsO1UBRlZhUQP+g7bxFeyRyel1gpMGzCGDV79c HpBb95OAI0Fo0W+bLhIo/eUMR+gXK+
69ZXkrjxSyQfo9QXTustMVOu hsXm2ostlK1eQrbsPQgz+LNYBAMTCiK6Jctgv5/T3BYdYvpWOo8O
ZAN72sAtUTnk/qO1VpWqvDF+7ObbrlaIZ0caEFHBW2bXARbj 2oz39I9t+cfjcu8y1QT1YDO4Rf3s
ilBqDwQyasW8cXpvkaxmgbna v/rxUmTFGtkyFxMBC3Tt3ghN/tghPwscWliaG2o5RhEq04bZj
QEl
QWtJPAsL+ukl3BdAPJZfq+J+QKJ/TTnQHI2wzHFnGKqRfAmL+Audq+M+xGWHJQ5gDBdTSzBShfhi
bdW9MQivU4+hQUbv9mXdI5SYX5zSdkN78VU LOBO6QZ2f8Rydmy9iOq33hEy
UQDa4/Jpc3DvJXxxL
WGsCaGyhMITwJ3f/NZF6KiWCKMzp7sSp+DHadOwE4tK2pK+/ifik6BZskHksbrk3YigrXLKs NhOR
cA9+3BetOA+09n3REzDH2dTb/gRjRL5FcQXXo9YQXP4n90gnB I0qvCYptcq69JAv0zI1n7BgF
yJQ
UY2izg1thW0zEmosPglB/wzquF7/XwL4Uu5EAt3ZPCBRSbH8NKKX 2rXic8ngmG1TjU0L18dPmudt
qkX0qTqW/9v5oqY9E5a37zrKOmFD5Pl/KwdhmUgABy6G0JQ4mU7WQZW1 HLmzchXHFHeAckgL64M7
/VGGO7PKKPWgOzhWCQeB+jTOEWgUcXyPjJDZESTj0Ae7c dAPcKtbcrS4Qf8+YtyBAnWOlFSYUSDg
UI/Gs4ZLpDqkAeDmxrF8AcPwglO 5ObN76xpnijLFYjTx+AB1s0dOhe5NtqXX5NusZferg
C+flTvM
crILjHQ/SmSXJKcPxXjxedvAX9KRxLke LZ00sBRNvm34ccqQFHqVBTfh
vOdkC4jmojeY5M1prbFu
MqkcXFKEuVyZN+b0VEqySt0A24HBiVhlZJFR2T 2Njf3gjDClywoegxemJfrCaN
jDz/RWSX0yoDsC
qjzBUinAyw2KyCKkHPyYxISP yfK5n52uvGCcpbbsu3cAg0gG
w4w6kKllZiFxkXrMTrZOTypA
ekz2
ZfnegcS7JtXw8vQXmfLpOFS1 KW1C4Ic7zHHGQucOu/FeoZvtdhOaLKfss/WyW4FKIaiTfe2jmFSv
QpLFSDhzxIsjk1HZ9zDZIeAm dF9ZDjRFjUIVxddzgcaW/0gXEq35XF7iUg+9zjJNs+u5OhMj1moY
f2WsVlAVy7oc3744scOh04O0 5ogRdP6EHHPY7ok0jhrqebJb
kIE0CQzNha5CPNyG0pi81eCK
7bXV
883TUKf9Zmbq0Ef4Td6pnCtr yGE6B88dYuS825SEmfo6b2ha
T306nnWbwiZT6ePCjntmBbAW
lGH4
hnY9etP8jv+FAnkuiCjSd7YfV1jTF9BeLfi PI3TCidf2LmPv9LovmIinGNo
MXib4IV++B+XTzgQC
g88shJ4WszS1eNiWYX1pAX81 b9RiKXuaMBCybS/XeOZ7vYOyNmbnBnAnxU2PtVc
LwU6icq/8TjVz
FdLl3nEUuVwvOM4B2aIvi2Jf 5WI5xB0QlyF8VFnzkCYrHIob
t2pKjS07oZCuy2l0PeCa5etc
LJ/T
QUVqwf7nR4ZmfKb5W2v4/tD0M8srr7XDkBprvmOYuMToQ IPyuwMqpyJvzJZu+UrWj8n0qkaJImia
Lh7Au5jnnz+rTtzuHkeVUSD8ElrRV6eYa+JyREOsJ9k713qZd/K5eM+ITOojefevSChSCkpqmEle
6MKr1QQcU914biWF26j6sB0w nobrnhP6u+1daY8rGaUjEjuIn6guHIcVvT
b1JR9rl9MMMyxn/d5X
OHw5u2xc3/NHs8/JKSYV+YVyyOaGlCGCAE2eg2rjpDo0q CC2l0iueJ+YKh0ThIt+ptgBOOp1WnrV
VWuY63JFM3hI0KhZEAKYORow hG6g5oj+SCNgMkQnUkswNk0JHxq+6W2SCSSkNtW6nT6tjbIphDFP
zt+AnN8DyStOJ+Ia62xU9m2429kAP0dcRnC6pc BOxRyiHbrEPjuSxWPMyip86E
MT/IuhXAIjSPii
s56qdKhhjUI+wpw3r/pQaX8qe+3dCw2od5eapgettYTR3kQYMv z+9/eGfo7BpjgF4/pNRNr1Z8+M
DVbTRAGk48Cr35hZTBREvEou hf4PsJzo42/5TSkNgW3utj6C3wilzAUMlGp
UMFzKMiwEFoquBFQs
uxfKOkaappfE0XpzK8uYKvXa u8Q1ncDIkKmZjFC40XOyGWxX
sFtP9k7Z17xwS8YHvOpvnz3b
47z4
pKKzZ3QCNEX+k0s2fVs4TpKGNbYTF/30K7FXDaIc7hLdPSk6E/C8YwgZMDg3wL5WErSHe8OMLT n2
Z0KwRel4W1j8W2BCzzieKPOC iOuuUQImf0XJupYcaM2EfctA
mVo0AWo3MY1jovC4brZ3v1Pe
sfDY
gwHYoK65KCjdRKC4TTHuC37b UnNEqdZAZM816qfrYMn0yVVG
FOO8lYOf8m3C1mU2PxjbL+SB8UZX
ipQdReiemlzjBS7ke3Rcf7OG gbVTBQHfb02bfzeP8LPDlpyX
mYVutRb4zCgkRUNhXVFFu3o8
yrKF
2lyys5yXc3KEhs6mnv1WdmBt KkaY13MqkCA02PpQtqq9o0KZ
OszkN8R0jj8XAsEr14Vhpx2Z
YA2l
tGB5+DyMzqF394abnABpoOVeywLtx rHQgde3mluaPg3NquXhrX861
vdIPWm2CAcQGFSxThlpwGTY
gL+YsbbnaxjR73pzyy+iw6lOpvUs1ZEi4mK5i2UNqDM XOGdNW+aWzm+35zRPgg4SJ8wnNmVTh4Qg
eyae8SVyZDe8DnnjzA7SuXfl o46QFPFLc4WN2flrL9G9qSek
mwZM6Wcdx0hTENeChbWHLUvw
/W6e
OM0ZSHZXAjkMO3eeBrSTIeVN drRr4Bo8sPCs3jOf7nhaZo6I
VqSRjmqL6EX4qtFLZQBi6Wqy
WIKn
iF0pEyJvgGyi5y9tszhVu7sP KmpIxr9udUhQ67QI2PbGfms9
DS+jfv6L4zv40OlwQjkwEBpQmrC
2
T+JQ8FMpDS0T0SaHFtC7iktKrD ybeSYD1v3gP7lqqR86QqI3aG
pRzAFzpDFGalgbNo1p17yJ4h
cw
3QP3kWB/eGCjrGDm2E/RX74DHhneboiXSy5ZzId7VoA xv27B42esb2zoi+gXJAIRE4AhfE5TewKR
M6DJTtVPtYwmWyDwVvSvdaGY uFF7e/BrGS1hgI8ojqg6gXZGoo/n2a1AGyTEusLWjFYkCyuWD9p
B
c3Y2tBt34s1FXpDt5mwkEch9 hrFD+1NqKThm7SmSOQezTbWveQfyS
mdT0MrG/glRGLbitPcp4+LZ
3N1OfO+f49k9GSnZweyWKgJY89s6BlK d5gQxF+cNiiXxRMhEVdBlbM3HnFPUSb
BKZr8ByE+YE0v3
BfzXViQSijCNeDLZmpmz1PXS ADTsAJR6CmW7k77C0z5loZho
XuWjNG9i0jaYITJ0mGjGXdvJ
ENVS
T3mRW4lBoTdg4Z/xy7Nj4N6CUVCEbldK2OMu1U1 7z/aPNcRo1cvwzxEhHxcxjoYnS0
zO3BZmnUnD
Ded6CWvvAsY97mzs0Bg7lG2R 2TjooohSMohayfNR1R7Rxi6N
eZF6wpx+vImlRb2ohziVRZesonI7
mPEK7bcIsZWuu1w91z8ed1oc MUsz4GRY5detslK17+Hu352APfYNhpP0kRx5V2KzWM
siZzPg+0Gl
PgxUOMYIuLeZghAI7kf5/0P8nE8w0Jki7o9igkL06rE6A jZhPLDfQg9gEyS1aU4XGNF2X
yyfBora
IjV6iVNmtRJERarCBLvRpgg9 49VViwHmNdkaz9Jb9UNP/ToOAjQlCZpL14vI9cI4j0wnF
ft7gTDZ
XCyXocChZnCNk52vblTyGrZN qnda+30WtMsea7HUcDi2uYB66aoz3
ndcoRRA2wMTUuRsExI2lqTp
q4t46psqpqsr5MZIi4Fp7Ad6 4QXNC3Y2tywBBAPxxkQ5idWc
MmN0d6NeTsWGG7k9H/d+p6OYANH8
m4VJeGYwFffSwIj8vbIAAKvf xSwDlGhrAAHEboDgAwALdLgA
scRn+wIAAAAABFla
补丁2:
/Td6WFoAAATm1rRGAgAhARYAA AB0L+Wj4Cf/A7hdADELiIbT19MqZQolIwjL
pRiPutAOgiyFZ2qT
ImmeMzrM+j7gdkO71MerzlMBnE1P1jggd XI1n34y3vEp4YMUOm+UpQdEj8H9xSQfon54qHHjYPq
c
q1moMZOk7pUcv+ih3rDdXyVGeMVXJZMkJCJNLr CssxPgcmypUKGTXK3rZvrN2A
CjVl1c0GTMsCaO
vTrbeef43Pp7FDGpm0x+PiCPmxyyPPoaegl8yj5zTRQU 5gnoXCT6N8afmBZM+f48Jvdi1HWrSofB
U+Mv1F44KJ1Z8t9uqZ+h64abEJH7a9ATG2kNQ8IR2dx mpxbOceB+P7eqqT+gf58Y5wiG7n8iPiRc
AxKhTzE7ECRZf9ISey16YTVa 0AayhZ7NUUWCLeb9xEcPQ9zc
79u8fXduFQYvmjBk3G5L6r51
9qX+
v1YjicWMz6hQ6+UmxK2bNYwKmDd8eB81yQKdHA DHoUMRFKcBU5UCZSwpvdonI9
nQd+CjjIX/Cv2z
3cmwJp3OuYxyhRR/mPJgGZzWh4w9eBcHyHTOU45H e2KmXX18hd8GkwQ91KqupI+gxq8zpTwvFwyY
ZLTS1afrHT7F59oBy3a1oemS G8Gy3WLLypSlOLNhuNWZ0Vil
GusKkPzYmQY/Yqnw9Z+OMj1u+maJ
OZhPAjfJMu4EGb1h8Q70cqxO P8fP6nJzvfqjPbIi7Bvd2PKY
jPrOVV/kb6YlNZW/p/Eivvbm1LQ+
WIh7zQ8tzYD1Vuyb0hfeR1ZK xbjE/EEzqJe7CLIxeJzyUpIFHo287
Hf2efS2GwCKBaGdEh/YHdhu
myrpNXJx6oNxbyH2ZcPSbd8y eo4ktzbWRthKeNCGN9wLrGnV
+2ODLC8OhdXJh1xiPwX99OXRq
rc4
aZ1dA4wPADStCNsVsYlwdu0q 3YZD/bdQB07r6dh2dwly8T1wnA/elozk4Z2RbGii9t7nGwxMmrV
v
gxemPfRqIx+O94GsLlfUQ6WKCTTPyEf2VVz MzPl8uDXkiAPsJcBclZnogt/FueWOX26LCNEs8ITb
80fJxDWSqytKOTGHHgpDx+2ROJ7TQUQYQ/koeR22QfhgOjBBaauLMfJE/QGJ8KjJSFWR8HZhFETO
8vWQoTDGof3Rs4lj0cN+W+K59leg32jwUDzaVmItJTO8jT XebdXMkeT7iRQXiqPaCcZQ81
+WKtp+
daCfSVAwUsHZ5dUpxSJE3lMu Y5aQyZ+RR9wBppgvdooj5vJp8yJJUoW
lv59JtynpD5youmQqifJC
YMYgp5mY2BigINtAcQAA/up9J+DiWg4AAdQHgFAAAH/OP3mxxGf7AgAAAAAEWVo=
-----------------------
PATCH 03
-----------------------
/Td6WFoAAATm1rRGAgAhARYAA AB0L+Wj4Cf/BsNdADGLiIbT19MqZQolIwjL
pRiPutAOgiyIjgPa
7sj81REDpdOjx4pZArDB7uyU EnGnXLx9OBez/LSADVCyFr1XG8is9H9zpRj87
xbsD6E26CL2oJ9S
aus0Ah8YpAWkRPWLNl64O4Xk /VYz1I3zgcejXqlxCGa57qE9R
iGaGFHyAyOcx5tgYHcu3FZUk
TOI
LehgPXQyIJ4DbO6g4a3fj2LQ akoq3JVagaB+nkB8fgV0D9D0daHf6LYJifzo
o758Ua8YL4IN++TZ
+03vW3SYyJyeI4K6s11m5jZ3v YPn0C99Kbsy2toYj0leHiNWw
T0ZuR9s+a0FaaZcfaVusaheK+1G
T9O1YQcVYbxL/UoLZF2sSEjkmodzjLvtNowPs f8hYQOom7CIByfMJ9Mu9hVGG
aD80nqhN3PpjNjn
/cxJ9GBH+/bsldekpUyEUm3pUV4YYvDCuv 7tFYBYNCiToVA2Nv5dJiqnxQ
+F/AqwVg024kj+yydF
j7IqBuvxHwCZr3CzU/fakSU6UGML7SJDPdIBnB1k8B kU1WHbGRbX9W158Ews+5bT9NZ96magKhiu
l+aLW63mTnrfMICj5HTKjtZovm AILtGKhBAvJZRT35WfFu5tGi
mCj0fwKA/X4b0BmUQdphU5k4Se
g96iwz7/U7O/aZZhHZbMjtdrzJeZhsDzwpYE YHg5xONnY+hbZl6T5dlZ5M8WzfQzTAO+m+pLb7DX
g14uTliMx2Tl9YfhiWvK1cQp T+XqlzUX25FOYAF249Q0zmx9R8
3A4cFuvto0D/kPT1XVUurj/9Ep
yIH5LK584RFD9ceh362o1bRI sgQXy9T0gibhN9QWgBZviKuZ
jpP1Sk4vOCL/KvdwY+lCf3Nsft5e
GGtCnlsSZmSMRBeg+w1e5ylIx1Fbioz8qXu1e2dB1 FlCZ38dexFRw16vK2tUT/gESbRFQwUE+Pqh
gH4i2biZ1OzHW54Yl7vWcmIz +gMl3ZyUTDL94NZAtiwDXoJKP
vCYXBXdIG3Hrv1oA5og7SauW
dsc
Mh8aRB1b+bWciZPkRpoKrE+3PwPBdf4xwKtAKs0zwYcD+Aih2PKdBY14hHpS3kVO9saKy wJyVU66
elCdXgnofcub0UI5ojWXGqNB 2gmV5ZGjdeHQujcKDw00Y5r5
kH/XjC7zF0bWwFjCjRe2FVHFNUA
L
05VXvJXboHVeZ8bzxVW9I+Y9fd9T4ILo3TidApvnEvNi3E ycAaspCUQjZ5hwDD5e5/Hu9UFF75Da
UfVEacS45aJgbz9jHN6VhiKF NE5lUBZcBIVNIumhk/3OW3b+BEkOsKd3OmV8Wqu+9VvB+KAIeDFS
6K76vrxOvglUJMBZlGGaGN8i tFDlXSpkAkgNqUZ0DZsXlt47
bmz9D9aKzan1AGndIMB6JxvC
/rIu
XUfanjnKqcNpYfXyDM6Bd3uG jyU2D5vTsE6skwEEfo7vyR3o
CG+AdX3gABQuc6b9GTF+352sSp9t
MdXX0o2w/QRw3FVWIloqylaIXAA1/C5HdyZP47BzhIvSyCBgayy+sGilKIttgQAmSxFpCmSEBvVn
pgOt6OXxx5j3E4PVvrWoaZr+6P2JCRkYCT+zvnVGluWub/y9AzdiPbDcFZnz4bgyIr3yuR P2rurf
L2M3Moour7MbrlYZ33qBbH5q A6BkQ4Y+AcAdolglii5P+oTHOlnfIPzBYQ3Zow393Ml0H
NaYizxi
BMYQkDAkgD42W5by/hLhvb/AHKKptcU2ELaZqNM1QC63hEA SoovihatunzI5LTq5CZkuVCy
VxTjr
WOqpUI99fWQqPEGG0WA+ZhLVvRgyvmF8u25CazPKbTXl 35xuVb72ie3YzZSde/n+dJO9vLdxWtZ8
1TdShPVE/hqRVA3H7pa2SN9lSvsN2aNoX nmBMvJyBknIaf2VxvNl96UOO
4veb5AAKaXaaZGvhM4Z
iY0GYk3zK+z4pPKS8gh4WaDXndQ4NivJHt DTw0G9WxQZ5X+iIKWrC8eaOiiLQjcOW1JpfM4
6Wgzz
i3PrZW22foOT+bRHmVZOlvcATivGz1RpG0kZM argDdGTkdRB3DHofQ+L+SlJlK/hZbyykAZC3heW
VePYCquxKk/mm293kmfuZyjbNmYbsv2W3io Em8gtwmCQMnl1eBeYyNMPRto
C/7MJ0dT7VRFEwzy/
FjGHFla802xIssQcIqEpwf7E inCSMnuZ9h4AYMx4XbpFTLOC
jwYv9zacOYi7H8/1phjqsgTlLHXi
iI/VtEoYvDNfSRRKeRmGuTXnRRJ d5eQjpfzQysaAv8ioR8Ydfv8
Dlnk/T35owGC9L8Vb8QAAQul/
pSIjDUgAAd8NgFAAAB0mSFmx xGf7AgAAAAAEWVo=
wc -l `find -type f` | sort -n | nl
10239 总用量
共88个文件, 10239行代码. 最大的文件namei.c也只有678行代码, 但这些可以组成一个正常运行的系统, 正所谓麻雀虽小, 五脏俱全.
系统的构建由96行的Makefile决定, 可以看到系统由boot, system, 和build tool 三部分组成.
boot 部分位于boot/boot.s, 从Makefile看出它由as86编译, ld86链接. 鉴于as86编译器的使
用普遍性较差, 可以考虑将代码稍作修改使其用nasm编译.
主要的改动如下:
1. 常量定义: a=b 换为 a equ b.
2. 注释: 由 "|" 换为 ";"
3. 段名: 由.text 改为 SECTION .text, 注释掉.data, .bss等暂且不用的段.
4. jmpi指令: 换为 jmp SEG:OFFSET 格式.
5. .word换为dw, .byte换为db, .string换为.db
6. inc xxx 换为 inc word [xxx]
7. lidt xxx, lgdt xxx 换为 lidt [xxx], lgdt [xxx]
8. mov mem,reg 换为 mov [mem],reg
然后用nasm -f bin boot/boot.s编译生成bin文件即可.
boot部分行使boot loader的功能, 从软盘装载system部分到内存0x10000, 然后再拷贝到0x00000000, 初始化为保护
模式, 跳转到system部分执行.
System部分由boot/head.s和所有其他部分组成. head.s被loader移动到物理地址0, 然后初始化页表, 1:1影射前8MB内存, 设置中断向量表, 启动分页机制, 然后跳转到main().
Paging:
pgdir:
pg0:
pg1:
only 8MB mapped, 3 pages used, addr: 800000
pgdir[0]=0x00001007 (present, rw, user)
pgdir[1]=0x00002007 (present, rw, user)
pg1[1023]=0x7ff000
pg1[1022]=0x7fe000
....
pg0[0]
补丁如下 (base64->tar.xz->patch)
/Td6WFoAAATm1rRGAgAhARYAA
AX7DsG1AWNAtH4vm2OxNx78p
44RqKuYpryGbg3QRncmVTiz4
Y+7jMOudbAyBSo90z8oItcQ2lX
Dirf2/NjS0Wegeer0jF9lsUQhtq3Or
48rSXvdRn1tMPJXIRXW+jNPPOWUco6zXDnzaz8GJ5Gon
Gs5DPJ9WYxDYqb6flwtRDxiq
NaSwoDSDFllryHWLe+6n9wbtMaJOECal8uYnFoETWB
dqdO+x0Bsu0zXJQXjhPPULGoMLxNC
fTwWQwFKIWAUl2n4FnPmLj5Q
sfV100DqKyigbhhKln5o3B2v
FXVS60l5tA301cbHHeVeW1xI
pBDO6PS/ck0FO8qAi8LwKylpnDg8WlHN
Ltu+v6QtH3Z0hHK75X6MNUEmvwOs
vimHL5u4LlnWE1ukdyigqAhQ
NBih+wNzqsPYAESrpRH+eKMj300uCGt1wZ1VgghcmBJa
ioo6tgOfN/lxDvaYkzjHtcRFoXFwCtlcNf
6kyG5/ougpLNJeo4b0313ELqxn9nVx
ywgtA4S/Zu5mSJ6GXulIbs+vRMhX1upfdkFpoxcUu4Gto87
FFjDTdnmvEH3yOsoRUp7SOZq
F3arDf1CkW8E7m9zXxlQekQd
Eaaz2aiJItSjpkPY0Szh8+eQPQ19p70VlZ8i7+7jsNKThOAlkOpVfTgbfe410L
pKDnrKlF9w2MdLo/7XOihZ3es+lsE6GMICRLgncl5c+5NwBWS1XLswB27m8LU2SeY8r
FvITT2xnUjyM5fvK9VUqq0Bg
PolGw3v8qvblTVyktR8kWxgx
Qz3hMuwMOK0JraR8mZQgaW9l
d9k+QTFau17vB4FOomB1udB/xfaZ6gbyc7gKBbiTmGZyeFlD
mHrSRSbaCApeaMyiv7xYmlGd
dDqWBM35b9OpiJwWqVgI1251
FnRO5Fx6RIAxaFbwMydu0SdW
YubC0FBeoQOf32RbdBUy3aiO
7k1CYhJqKE1VCID3/dyPVduYpMxkgiuHcQhkl1Rsy
8eKT5GsyBjv1Nz7WguDW+HjjwwS2mbURBLDJWw8uq0yu3
SZ2kPbvQE0bvt/CMSXmGYK3rkbGPyd3tF1TsW0
SdGH0J6FQ/1UdL/U8mcMIb3sNbNxPl6gmfTZxoD
70jmth4EBkz9w1AayDf3Lx4w
ybv5GdZh9WE39iXf12rDr7UZ
9Ozjh8zljSGTZNg6PSO23Gds
62kFzSfWlpn9PnAT6JOhr3zB
Pke2/OBWE+L0kysa+bbcXjFLYLeQFmfG9woD+zg5KrpZfGFhcrDoPCUSejOox
V3cvaFnKHK+XsI2TaZUrsiDTKmR75O9xoEv
of+u1v5Kuc41QAldPySWI8uThP8
dcRZEd3eCTYmRieUU5AxHfNk
Yh0iC4JMDW2HDBuoaHwJG3ux
Tp/5Je2ktuBL8A/RQdENaEEk3oxXwymJFOBDeHL
S+tQPwAcXxWZeM1Mn+b9jNXdJW1gimd76XbsEFOeiW
a8D9pXufaooIXcXmWhFCRTxe
0BhEIj98JdN2DEb3oCZxp9O8
0pYnV7FYpCr+Ow628/kwGTMnV5AxBD2k94A6rgqW8x
YofUaE6hozBwnSEPXawrGsvA
J0PlYIipt4U/+WFM5d8sSx1RHj0vw4vsWj0R/dq1RdqISm8N772NTuOVzd4oy
DjiLBdsxrtwNF6+nJXSrH1Ap3b/j2c9xKvRW+4VGZp1qvve/NDxmiCum5EL2sPsoXFhWDjnu
SiXRBi6gT/aPqZlhlbYN5gL5qEBL4MMm8M
ajbfisQN/gqsXEfsYkv849InMHgMn+5Kwu9tCQuDBm1s3IUh314lds
W92ayw6o+FmsKcWhomYWcdBaMj/1ebRzX7tVXXTtop3g37Y6Tvm
xkZsQ5W8snI0Q0f08d4QBHGk
cwv/Wu+w8+ehabgDBrmgzqz9845zXb6eAm
IAEp5KFeJ5CSIf7VfV97Q8BS
/A054/eFpA6MbQVjZX9iS154FgOh7e
AasRp3t1ZYDnEDKSwG9lsb8k
zg49GHYMwBBK+R2V5f45GK8b/fsIu4VBoXb/UXjHTNozYSCxtLgalAD2V7VV
708dQ428YSc1uKQl6BeOqWMA
WNYUyqt4R3LXYFNWYbNVExIk
h9LJlnfKRZNKSkr3MClTQwVQ
sOdF+lSavHW16MEyfjCrzWPRpHk41
cwhOqKi8qegEIsS6GBKCE7x7
/wQuGdlbItf3+CK4jSAqRCi3vW6O11KiOqLIk
df8ZXyz6Ev1wDJ7P9fOpYqF+neRFejZDizxoArATk6KX+rrW9mT04I9dFqZ1qmEagKulK
nvmNdP3B9TtKmdp9vQGGtXj7
B15XLfYHw1MLlo7ycE1B1e10
GWzeqA24aBEZEWMDKyk06Szi
mGJWobAlS0ts5i9iiF0hlRIn
uoRAAls9l04z3eiAI8NVWEbr
/zml+704+6CeWPLUO26zj7eye8alR05rn
WdBWjDCvuyNTycKs+oXxjpzrasb1nnqbIqdR1Y35V
G0eF6/zPHQqzLOpfJ6xhvXMUhcKJi9
YoSbZHzHUuKzlF2ksyWGqHvk
NEHwAUIOLvJ37MW2gRKPgvoM
YY9jNnhKlxoAH1shT2UaCOpI
iO+eiflm4zTRlkgVImn52/RwVAPb3iZoHFxaTikMeNl08g
E8hPIFxxRkH2HSCQwWzeJyxT
ousXayURQya2qimFAK5xI5g6
a3iiAv8cpCnpEGHLTJuCLpbH
eq339M0m2viHXiHvvumyDXGQ
5eEaG1/XR1MnCFc801ws9PzoJk5Vs9S
ufoDxHYNu/TNHKha8iULJ0oEh8WG6aZ1fz
L/xjgYTxBWyzuMyaZsPDuCg3cM
JraH7z+rgkfH7wgoz6jgSVDqy5wTV+z0dypcd64QMgYmsT5een1UAw
tqJVe0Fs8oPYesc8NI6n5sao
kkaC4JQUH2r96k/DH/5angdrviPvNjZgbwYisvSf+apPiiXN+pJyN8DB/q3LOfcg9R8vG+9FjqWl
9jev5MjXAeXU5g2SGM6lTwps
A/LuUZ3Eaq1K7X1+qODNt5Kc37CDoMwzKICJWo0X
YxoOnY7aebECPPNXFLf9+Os3/4hstvvZlBdwuuctLtolOP9Hs
AMclKN4Pj3sdiIubROp94PD3
EfmYRMIaeg+N/Dhsr4vAIelXIXJ+GrKF4BvXvvh0cfe+ieMa0QRSkXys1g0f166DaMqn
kQSVjA6c3f+w1qmeRccA2SOw5r7lYupNRon
WcssQhWjUMadWJ47Vm8KjVY/FxcOpAapJ2mg0Nm3NuUYVXcp
r0NgzXAF4f6oyKaB2OJgVlF1
tiFgo4u02Yd7WYF5zGLLFdAV
cFfgwNodDzLStIRxNIOMa+VGW/6e60ZIcIo68hnL1JnIe0rVDL
uJFS8OGJNcR8+P9xDXlLJxIb5N9nIWlwqUDwP
J7FoSMstA6AIKP41FCuw/eiw9fiCT8TOXn6nh5KRgDXOO
0FgwFBEl5Lvu/F2K/fw/KKUXVcfSQdvGqDxKX2gtTjCh
WGBkCEJhh185gvSwXqD6ejUF
NQ5sVxHoXDIJHi+f/fo289LtkbFasuF9VCcc13JBt
BQLD4oMC0XLKHMCo9L/FGqzN5jn7ekgKZvG5ASS//RVEvY2cYBbCU7v7R5ZsOVVyj
iLZEJzr+zsz6gzmEe8d4U6fiwXRA68HV
MYS4GdJlpcENXtIrQinvGNTU
noc+N5GlsMSqCVpzeZmzrADEihoM
5kuxeZyf8fGPviSUkGDR3IDR
GWT0K/BpbON8V1j9OgEs4ohOIX+lNO5qkEfQ55e757Kh5tC1DPF
roYsIMtp20v7NxXVmDNUzPtl
Z/EmNwKaCQyHfEbiThaeGO4mc9
nGck1VKb4MzVq/fo2Oyu0xQCWR3BEM+iF0XyvNwtLoHinrrdrQUw5SB
20ocId30PjKA80ERqBLJoZON
Ih+u5qk1DTsR70nkvfQLEI+piBNzUnc6VK3t8Z8nKhKMsTN
MLPBCXK6UVax5IYFqRGhyqS7
8WA9PIVpxsIEIPx/qwb/3HPv6Q9Gu2RqHzhZHs4unWjd
4Cc9u63GTqnFUns1LXs2oX9o
k//ZfXL8cuNpVfKi7pEF3sfuVPk
+Au0z2csYgV+/Ux66qbq+oTK5EzBvKxKpZFeWuyN04XKd
fJ2VC1NAHCpxduu+vGdYpzCOBZmSuOdxuE4cUSEp
X7FNHlKJy7ush4g99YuQwiUB
mmWF7mJwyYcn2EDNEnHVTqmV
Z//69yMFRwOebRhSS4SJuZPk2KL
AuHOFf2dVFY4TuHl9L82dtut
1XmVTjN4WoUSaeMjk3+zBH+Dhii70cbEIWD7QFIEgcPs4Ff
gs7jbsnliRLwIOBvuWWm2zdw
YTFGmPikZuFr3gDYI2CWRqO1
Wgr7ZyAh83U08tNZXCkYKy7Z
RzYdjF00Tjh14NMe710qY9sp
mlKSHAJOUTPxv41/zOxI80YE2X0ws+TElDPYnXaKYQFFhCL128Goy4
UHPZxE5SGM4uGMKf4h5ppuKY
xXgKRNRHLC/L4v0d3xVOr+IsnZ2qDrU5T6V/f+87MWyHlLvE6XE6O5jA5fq+yrnzES/4/oAFDgoh
2IgJedCS6qrqTvQRCG8rWHv6
trX1LFzeospA1DFiHw8vynEq
TknbwbkD1dw78t+nTgxkv3LVCJqhuELGbrNhH9H
HagZV6cx3eCazlb9niHDEBX/n9EGJH24ikZ48zmXJ3wzUXvw
K/3a1FdGe5afo/QSJIB34kc+vw29LLlt8npwNh5/oF7EpFB7/X93Nx8s1UuGudX5hVsvPg4/oRtk
o9TE9pbQwh0rNEV7yfVlDYzt
RAw1k7xOSuCjg5peal3KiFZK
68vlVdsjg90CpE2t+9xc637LeYQGtxLhz2j+poi18/2M0hb1cv2PVH8+5fpvSWeprtzfTOO7yYRF
en4SUnYbd8a+VeZEYuUk4D1BZV/5tRUFpX4ZTAE38cabqRuU8yy
Tl5E15ExJmvzTPv5jN7phdRn
0urNeKVto1mJTZMQZ9kxL3jE
sjyZlVvpG+/1XnEMac5+M2ejDxStDeXzHYOC90uoMAUG
qDXqWm4lxjmzHDVQDRx8S7kJ
m7l4mmTKcad5ej2EkEXwipOJ
BKfFAdw0GhvcPm31+UKsWBX6qqILwLFROSmjEpWer
xPc9wtBC3umcP4R4b0968Tsz
Td3vTwCE3eqVBt7plQ37hCTU
vcaquyoq8+dbQTXnFZCKdnwyqnWkPiphPU
XwDgTdtYcRqk65TOHuJiwFn3
vKbqEZ2dkM4JK/Sq5nOZ/2oZUAI7uwKohsaPp6bDb5/Q3qu+AMmmkuffpl0vESQx3Pwp4pJU
loV7N5KEsDMiu6j1ttN9Xzc7
r5QI+egTgNTt8HdLauOVpXCzdHAUd
ype9atYabZ5zUogjrO4PKQ0u
pZ25FWtNCIXhTAVzFED8G5Kt
Ks5rswI6O0l6s2t1/vNMDFpRQznwi8Ofoq9HljXzY
a/toh1DbdRecicI9lUF0bpcMNM
dpgJwvNOm3CXnaYy6SEgSFV9
MQTWB+Q/qwGax84UOFgUcXlvOoaYWyoy
ekD4qYB1BwY5Do3oTbveyU9P
LFu0lgLUJLZq/HBWHvUYPtQyZkvcAbcBq0nM+oNt/4DQHWvGF8LNCjt1g3ITNiTeb
rGg2sxmgLVt7/PfMnrISH/7XjoOAx/s7RzLDTBPTTInxLiG/Vji9FbQZE4hAraQHkRPTyYVt
4iApxi9J6cuKLWDcWaV5sz1X
LA9v9gxe75qKQCmUtL65J/fZQwxYhQH4lXCXgogPdrjd3f
yd4zVQ1utQxSmUQOa3ZFhWnH
LwaqdTejgIHyOm0de8mE/xLYf4wZy00cA7SPIRuq5oB2f
zmWhPaI8eXk0ZdE8oJVRsxJI
m+LHX1n20w7XbanuZPDfS12HKc
Ph/ZHLnVCuJGukrmkv+wxZvkvSQ1IyoxhObx9wvBHoK
J7wRx9WAVasxigYM5cRlWkRH
I24u+srjTj3lF6IYPCyn2Znt+SynABscNstBrg8Wxjbrl4yH8
gguGNTP/SostJF3t65HjVaTeOAEp9JAP
3xLTDHeJgYfyAenrweQ92eBk
wg2D6ZK/BP2B3Yj87Tqen1JxopDcAEi7
ktajq6I5Y+q7VtrdnQBMNzkZdjFAoc3u07
YPd/8I40iOvzoy1wRX4uV5GGaOjP
COmSuTjyiFQSEubAWt0/aB6Dcd4pjs2Z3PXmHM2G7tHw
0VF84PCdTquih+ztf8RariKAcojfPbdqD3+1jyikHneyRe5mSv0LDe8+B/xkpUybR68Bf9iJ+23a
4Y7plwP3g8t4oR0f4U4wnKzK
3n1xGw/BdkGeu98HXPXxMf98ToFuZOk
xxIJGgBPThzvRXbwOMOJ1y3t
xjiXilpB7aLC0VBHQLjTP4nU
e7pUEM8whD98SIaFaBeju6pc
G8TWiKXqE/Jpl4Q1NOi0bIQTexE3F2s2Df
6bm75RDWU0k/yKl89PGbzjNKi3izEDeyBVQd
o418nRv4NJL45pAAyE9YxLyr
ZKVG6KXd00SaCHAE/Udlc1jgDDdUOriYWM03swsqu
pd0AdG46ii8asIyMZBCd72sa
5gpMz5VSsCm7Y1JGSzB+GK8DSLaeve2EY01eVdvKLCKz
zuvLNN0DoOCQLncJtMZUTdjH
bKRfsGyWsaLArnhFmMJizKCM
TCMGDZV/IsO1UBRlZhUQP+g7bxFeyRyel1gpMGzCGDV79c
69ZXkrjxSyQfo9QXTustMVOu
ZAN72sAtUTnk/qO1VpWqvDF+7ObbrlaIZ0caEFHBW2bXARbj
ilBqDwQyasW8cXpvkaxmgbna
QWtJPAsL+ukl3BdAPJZfq+J+QKJ/TTnQHI2wzHFnGKqRfAmL+Audq+M+xGWHJQ5gDBdTSzBShfhi
bdW9MQivU4+hQUbv9mXdI5SYX5zSdkN78VU
WGsCaGyhMITwJ3f/NZF6KiWCKMzp7sSp+DHadOwE4tK2pK+/ifik6BZskHksbrk3YigrXLKs
cA9+3BetOA+09n3REzDH2dTb/gRjRL5FcQXXo9YQXP4n90gnB
UY2izg1thW0zEmosPglB/wzquF7/XwL4Uu5EAt3ZPCBRSbH8NKKX
qkX0qTqW/9v5oqY9E5a37zrKOmFD5Pl/KwdhmUgABy6G0JQ4mU7WQZW1
/VGGO7PKKPWgOzhWCQeB+jTOEWgUcXyPjJDZESTj0Ae7c
UI/Gs4ZLpDqkAeDmxrF8AcPwglO
crILjHQ/SmSXJKcPxXjxedvAX9KRxLke
MqkcXFKEuVyZN+b0VEqySt0A24HBiVhlZJFR2T
qjzBUinAyw2KyCKkHPyYxISP
ZfnegcS7JtXw8vQXmfLpOFS1
QpLFSDhzxIsjk1HZ9zDZIeAm
f2WsVlAVy7oc3744scOh04O0
883TUKf9Zmbq0Ef4Td6pnCtr
hnY9etP8jv+FAnkuiCjSd7YfV1jTF9BeLfi
g88shJ4WszS1eNiWYX1pAX81
FdLl3nEUuVwvOM4B2aIvi2Jf
QUVqwf7nR4ZmfKb5W2v4/tD0M8srr7XDkBprvmOYuMToQ
Lh7Au5jnnz+rTtzuHkeVUSD8ElrRV6eYa+JyREOsJ9k713qZd/K5eM+ITOojefevSChSCkpqmEle
6MKr1QQcU914biWF26j6sB0w
OHw5u2xc3/NHs8/JKSYV+YVyyOaGlCGCAE2eg2rjpDo0q
VWuY63JFM3hI0KhZEAKYORow
zt+AnN8DyStOJ+Ia62xU9m2429kAP0dcRnC6pc
s56qdKhhjUI+wpw3r/pQaX8qe+3dCw2od5eapgettYTR3kQYMv
DVbTRAGk48Cr35hZTBREvEou
uxfKOkaappfE0XpzK8uYKvXa
pKKzZ3QCNEX+k0s2fVs4TpKGNbYTF/30K7FXDaIc7hLdPSk6E/C8YwgZMDg3wL5WErSHe8OMLT
Z0KwRel4W1j8W2BCzzieKPOC
gwHYoK65KCjdRKC4TTHuC37b
ipQdReiemlzjBS7ke3Rcf7OG
2lyys5yXc3KEhs6mnv1WdmBt
tGB5+DyMzqF394abnABpoOVeywLtx
gL+YsbbnaxjR73pzyy+iw6lOpvUs1ZEi4mK5i2UNqDM
eyae8SVyZDe8DnnjzA7SuXfl
OM0ZSHZXAjkMO3eeBrSTIeVN
iF0pEyJvgGyi5y9tszhVu7sP
T+JQ8FMpDS0T0SaHFtC7iktKrD
3QP3kWB/eGCjrGDm2E/RX74DHhneboiXSy5ZzId7VoA
M6DJTtVPtYwmWyDwVvSvdaGY
c3Y2tBt34s1FXpDt5mwkEch9
3N1OfO+f49k9GSnZweyWKgJY89s6BlK
BfzXViQSijCNeDLZmpmz1PXS
T3mRW4lBoTdg4Z/xy7Nj4N6CUVCEbldK2OMu1U1
Ded6CWvvAsY97mzs0Bg7lG2R
mPEK7bcIsZWuu1w91z8ed1oc
PgxUOMYIuLeZghAI7kf5/0P8nE8w0Jki7o9igkL06rE6A
IjV6iVNmtRJERarCBLvRpgg9
XCyXocChZnCNk52vblTyGrZN
q4t46psqpqsr5MZIi4Fp7Ad6
m4VJeGYwFffSwIj8vbIAAKvf
补丁2:
/Td6WFoAAATm1rRGAgAhARYAA
ImmeMzrM+j7gdkO71MerzlMBnE1P1jggd
q1moMZOk7pUcv+ih3rDdXyVGeMVXJZMkJCJNLr
vTrbeef43Pp7FDGpm0x+PiCPmxyyPPoaegl8yj5zTRQU
U+Mv1F44KJ1Z8t9uqZ+h64abEJH7a9ATG2kNQ8IR2dx
AxKhTzE7ECRZf9ISey16YTVa
v1YjicWMz6hQ6+UmxK2bNYwKmDd8eB81yQKdHA
3cmwJp3OuYxyhRR/mPJgGZzWh4w9eBcHyHTOU45H
ZLTS1afrHT7F59oBy3a1oemS
OZhPAjfJMu4EGb1h8Q70cqxO
WIh7zQ8tzYD1Vuyb0hfeR1ZK
myrpNXJx6oNxbyH2ZcPSbd8y
aZ1dA4wPADStCNsVsYlwdu0q
gxemPfRqIx+O94GsLlfUQ6WKCTTPyEf2VVz
80fJxDWSqytKOTGHHgpDx+2ROJ7TQUQYQ/koeR22QfhgOjBBaauLMfJE/QGJ8KjJSFWR8HZhFETO
8vWQoTDGof3Rs4lj0cN+W+K59leg32jwUDzaVmItJTO8jT
daCfSVAwUsHZ5dUpxSJE3lMu
YMYgp5mY2BigINtAcQAA/up9J+DiWg4AAdQHgFAAAH/OP3mxxGf7AgAAAAAEWVo=
-----------------------
PATCH 03
-----------------------
/Td6WFoAAATm1rRGAgAhARYAA
7sj81REDpdOjx4pZArDB7uyU
aus0Ah8YpAWkRPWLNl64O4Xk
LehgPXQyIJ4DbO6g4a3fj2LQ
+03vW3SYyJyeI4K6s11m5jZ3v
T9O1YQcVYbxL/UoLZF2sSEjkmodzjLvtNowPs
/cxJ9GBH+/bsldekpUyEUm3pUV4YYvDCuv
j7IqBuvxHwCZr3CzU/fakSU6UGML7SJDPdIBnB1k8B
l+aLW63mTnrfMICj5HTKjtZovm
g96iwz7/U7O/aZZhHZbMjtdrzJeZhsDzwpYE
g14uTliMx2Tl9YfhiWvK1cQp
yIH5LK584RFD9ceh362o1bRI
GGtCnlsSZmSMRBeg+w1e5ylIx1Fbioz8qXu1e2dB1
gH4i2biZ1OzHW54Yl7vWcmIz
Mh8aRB1b+bWciZPkRpoKrE+3PwPBdf4xwKtAKs0zwYcD+Aih2PKdBY14hHpS3kVO9saKy
elCdXgnofcub0UI5ojWXGqNB
05VXvJXboHVeZ8bzxVW9I+Y9fd9T4ILo3TidApvnEvNi3E
UfVEacS45aJgbz9jHN6VhiKF
6K76vrxOvglUJMBZlGGaGN8i
XUfanjnKqcNpYfXyDM6Bd3uG
MdXX0o2w/QRw3FVWIloqylaIXAA1/C5HdyZP47BzhIvSyCBgayy+sGilKIttgQAmSxFpCmSEBvVn
pgOt6OXxx5j3E4PVvrWoaZr+6P2JCRkYCT+zvnVGluWub/y9AzdiPbDcFZnz4bgyIr3yuR
L2M3Moour7MbrlYZ33qBbH5q
BMYQkDAkgD42W5by/hLhvb/AHKKptcU2ELaZqNM1QC63hEA
WOqpUI99fWQqPEGG0WA+ZhLVvRgyvmF8u25CazPKbTXl
1TdShPVE/hqRVA3H7pa2SN9lSvsN2aNoX
iY0GYk3zK+z4pPKS8gh4WaDXndQ4NivJHt
i3PrZW22foOT+bRHmVZOlvcATivGz1RpG0kZM
VePYCquxKk/mm293kmfuZyjbNmYbsv2W3io
FjGHFla802xIssQcIqEpwf7E
iI/VtEoYvDNfSRRKeRmGuTXnRRJ
pSIjDUgAAd8NgFAAAB0mSFmx