svn commit: r342682 - in head: share/man/man4 sys/contrib/dev/rtwn sys/dev/rtwn/pci sys/dev/rtwn/rtl8188e sys/dev/rtwn/rtl8188e/pci sys/dev/rtwn/rtl8188e/usb sys/modules/rtwn_pci sys/modules/rtwnfw...

Andriy Voskoboinyk avos at FreeBSD.org
Wed Jan 2 06:48:55 UTC 2019


Author: avos
Date: Wed Jan  2 06:48:53 2019
New Revision: 342682
URL: https://svnweb.freebsd.org/changeset/base/342682

Log:
  rtwn_pci(4): add support for RTL8188EE chipset.
  
  Initially based on https://reviews.freebsd.org/D15692;
  later deduplicated and improved a bit (Tx reports, IQ calibration support).
  
  Submitted by:	Farhan Khan <khanzf at gmail.com>
  MFC after:	4 days
  Relnotes:	yes
  Differential Revision:	https://reviews.freebsd.org/D15692

Added:
  head/sys/contrib/dev/rtwn/rtwn-rtl8188eefw.fw.uu
  head/sys/dev/rtwn/rtl8188e/pci/
  head/sys/dev/rtwn/rtl8188e/pci/r88ee.h   (contents, props changed)
  head/sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c   (contents, props changed)
  head/sys/dev/rtwn/rtl8188e/pci/r88ee_init.c   (contents, props changed)
  head/sys/dev/rtwn/rtl8188e/pci/r88ee_reg.h   (contents, props changed)
  head/sys/dev/rtwn/rtl8188e/pci/r88ee_rx.c   (contents, props changed)
  head/sys/modules/rtwnfw/rtwnrtl8188ee/
  head/sys/modules/rtwnfw/rtwnrtl8188ee/Makefile   (contents, props changed)
Modified:
  head/share/man/man4/rtwn.4
  head/share/man/man4/rtwn_pci.4
  head/sys/dev/rtwn/pci/rtwn_pci_attach.h
  head/sys/dev/rtwn/rtl8188e/r88e_reg.h
  head/sys/dev/rtwn/rtl8188e/r88e_rom_image.h
  head/sys/dev/rtwn/rtl8188e/usb/r88eu_attach.c
  head/sys/modules/rtwn_pci/Makefile
  head/sys/modules/rtwnfw/Makefile

Modified: head/share/man/man4/rtwn.4
==============================================================================
--- head/share/man/man4/rtwn.4	Wed Jan  2 06:03:19 2019	(r342681)
+++ head/share/man/man4/rtwn.4	Wed Jan  2 06:48:53 2019	(r342682)
@@ -93,6 +93,7 @@ The driver (if not compiled with
 ) may use following firmware files, which are loaded
 when an interface is brought up:
 .Bl -tag -width Ds -offset indent -compact
+.It Pa /boot/kernel/rtwn-rtl8188eefw.ko
 .It Pa /boot/kernel/rtwn-rtl8188eufw.ko
 .It Pa /boot/kernel/rtwn-rtl8192cfwE_B.ko
 .It Pa /boot/kernel/rtwn-rtl8192cfwE.ko

Modified: head/share/man/man4/rtwn_pci.4
==============================================================================
--- head/share/man/man4/rtwn_pci.4	Wed Jan  2 06:03:19 2019	(r342681)
+++ head/share/man/man4/rtwn_pci.4	Wed Jan  2 06:48:53 2019	(r342682)
@@ -48,11 +48,11 @@ kernel configuration file:
 The
 .Nm
 driver supports PCIe wireless network devices based on the Realtek
-RTL8188CE chipset.
+RTL8188CE/RTL8188EE chipsets.
 .Pp
-The RTL8188CE is a highly integrated 802.11n adapter that combines a MAC,
-a 1T1R capable baseband and an RF in a single chip.
-It operates in the 2GHz spectrum only.
+Both RTL8188CE and RTL8188EE are highly integrated 802.11n adapters
+that combines a MAC, a 1T1R capable baseband and an RF in a single chip.
+They are operate in the 2GHz spectrum only.
 .Sh SEE ALSO
 .Xr pci 4 ,
 .Xr rtwn 4 ,

Added: head/sys/contrib/dev/rtwn/rtwn-rtl8188eefw.fw.uu
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/contrib/dev/rtwn/rtwn-rtl8188eefw.fw.uu	Wed Jan  2 06:48:53 2019	(r342682)
@@ -0,0 +1,506 @@
+begin 644 rtwn-rtl8188eefw.fw
+MX8 at 0``@````0)2%6L"L``*($```````````````````"134`````````````
+M````````P58`````````````````````````````````````````````````
+M````````````H<T```````#A_```````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````,*O@/XR$D($A=`+==`(JN#"C.6*)&?UBN6,-'GUC-*,["2)^.:\`P)T
+M_\.5@;1``$#.>01X@!;F"'`+PJ_F,.$#1!CVTJ\(V>WJB]`BY0S_(R2!^`\(
+M"+\$!'\`>('F,.3R`.4,PY]0(`4,=(@E#/CF_::!".:N#+X#`G3_S?CH;6#@
+M".;`X(#VY0S3GT`GY0PDB?CFK at R^`P)T__T8YLWXY8%M8`;0X/88@/7E#"2(
+MR/85#(#3Y0PC)('X?P3"K^8PX`,0X at Q_`##A!S#C!'\(5/14?,;2KU2`0@<B
+M>(BF at 70#8`;_"';_W_M_!.1X@/8(]@C?^GB!=C"01<5T`9/`X.23P.!#B0%U
+MBF!UC'G2C-*O(@/OTY0#0`-__R)T at 2\O^.8 at Y?3"K^9$,/;2KZX,[L.?4"$.
+M=(@N^.;Y".88O@,"=/_][6E@"0GG&1GW"0F`\Q86 at -KNTY]`!`6!!8'NTY]`
+M(G2(+O@(YOGNM0P"J8$8!@;F_>UI8`D9&><)"?<9@/,>@-GO)(CXY at 3X[R\$
+MD$7%D_8([R^3]G\`(N_3E`-``W__(N\C)('XYC#E],*OYE2,]M*OY0RU!PIT
+MB"_XYO6!`D)-4"YTB2_XYK\#`G3__1CF^72(+_C[YOSI;&`(J`7G]AT9@/2H
+M`Z8%'^4,M0?C?P`B=(DO^.;]&(8!#W2(+_BF`0B&!.4,M0<"K('M;&`(#0FH
+M!>;W@/3E#+4'WHF!?P`B[].4`T`#?_\B[R,D@?C"K^8PY04PX`+2Y-+BQM*O
+M?P`PX@$/`D),C_#D__[E#",D@/C"J3#W#7\(YF`++?9@,%`N@`<P\0;M]F`E
+M?@((,/`0PJ_F$.<C#C#B#-*O?P2`$L*OYA#G$U3L3O;2KP)"37\(".]$@_3"
+MKU;&TJ]4@$__(L7P^*/@*/#%\/CE at A6"<`(5@^`X\"+O6__N6O[M6?WL6/PB
+M[TO_[DK^[4G][$C\(N#\H^#]H^#^H^#_(N#XH^#YH^#ZH^#[(J0E at O6"Y?`U
+M at _6#(N#[H^#ZH^#Y(NOPH^KPH^GP(M"#T(+XY)-P$G0!DW`-HZ.3^'0!D_6"
+MB(/D<W0"DVA@[Z.CHX#?`D5S`D+=Y).C^.23HT`#]H`!\@C?](`IY).C^%0'
+M)`S(PS/$5`]$(,B#0`3T5H`!1O;?Y(`+`0($"!`@0("01;CD?@&38+RC_U0_
+M,.4)5!_^Y).C8`$.SU3`)>!@J$"XY).C^N23H_CDDZ/(Q8+(RL6#RO"CR,6"
+MR,K%@\K?Z=[G at +X`08&7`$&!F`!!@:0`43172E<V6"G`X,#PP(/`@L#0==``
+MP`#``<`"P`/`!,`%P`;`!Y`!Q'3-\'1%H_#1''3-!)`!Q/!T1:/PT`?0!M`%
+MT`30`]`"T`'0`-#0T(+0@]#PT.`RD`!4X%4U]3FCX%4V]3JCX%4W]3NCX%4X
+M]3RM.7]4$C(>K3I_51(R'JT[?U82,AZM/']7$C(>4Y'O(L#@P/#`@\""P-!U
+MT`#``,`!P`+``\`$P`7`!L`'D`'$=%;P=$:C\!)C(N5!,.0$?P*1)^5#,.`"
+MT?3E0S#A`Q)-N^5#,.(#$DX*Y4,PXP,28W_E0S#D`O&PY4,PY0+QWN5#,.8"
+M\8OE1##A`M'J=%8$D`'$\'1&H_#0!]`&T`70!-`#T`+0`=``T-#0 at M"#T/#0
+MX#*0 at .?@8`,23H0BD($*X&`/Y/"0!5/@1`+PD`7\X`3PY/^0 at .?@8'F0@*/@
+M9`%P<9"`YN#$5`]@)"3^8`,$<!^0 at .[@%/#@_F`&D(#PX&`/[G`&D(#MX*/P
+M?P&``G\![V`_D(#KX$00\)"`\.!@`[0!">3U'9"`\."`#>3U'9"`\.!U\`.D
+M)/[_D(#OX"\23O.0`5=T!?"0 at .K@(.(#$DK`(I"`H^"T`1.0 at .?@8`V0 at .O@
+M5/[P5`=P`O&F(I"`Z>#_?0$"2L20@*/@9`%P)9"`Y^!@'Y`!5^3PD`$\=`+P
+MD(#DX%3[\)"`Z^!4_?!4!W`"\:8BD("CX+0!%I"`Y^!@$)"`YN!4#V0"8`,"
+M:DH23CTBP.#`\,"#P(+`T'70`,``P`'``L`#P`3`!<`&P`>0`<1T_/!T1Z/P
+M$F-/Y4DPX0(1E.5),.(#$F.AY4DPXP,28]WE2C#@`Q)D&>5*,.0#$F2XY4PP
+MX05_`Q)$)^5,,.0"$9[E3##E`Q)DSN5,,.8#$F5D=/P$D`'$\'1'H_#0!]`&
+MT`70!-`#T`+0`=``T-#0 at M"#T/#0X#*0 at .?@8`,2:OLBL2J0 at .W@%)`%<_!]
+M`G\"46.0 at 0'@,.`MD("CX+0!)I"!I.`$\."T"@N0 at 0/@!/#DD(&D\)"!`^#_
+MD($"X+4'!>2C\!'D(N3_CU.0!!W at 8!B0!2+@]59T__#Q\;\!`C%<D`4BY5;P
+M@`(Q7)`$'W0@\'\!(G0?+?6"Y#3\]8/@5#_P[V`=="$M]8+D-/SU@^!$$/!T
+M'RWU at N0T_/6#X$2`\")T(2WU at N0T_/6#X%3O\'0?+?6"Y#3\]8/@1$#P(I"`
+M!.#_?0$Q^8Y4CU6M5:Q4KU,Q$:]5KE20!(#@5`_]K`=T$2SU at N0T_/6#X$0!
+M\'01+/6"Y#3\]8/@5/OPK`=T%BSU at N0T_/6#X$3Z\'05+/6"Y#3\]8/@1!_P
+MK`=T!BSU at N0T_/6#X$0/\)`$4^3PD`12\)`$473_\)`$4'3]\'04+/6"Y#3\
+M]8/@5,!-_704+_6"Y#3\]8/M\"+3$*\!P\#0D(&<[?"0 at 9OO\.3]_!)K67P`
+MK0>0 at 9O@D`0E\)"!G.!@#G0/+_6"Y#3\]8/@1(#PKP5T""_U at N0T_/6#Y/!T
+M"2_U at N0T_/6#X%3P\'0A+?6"Y#3\]8/@5/?PK at 2O!=#0DJ\B=#TO^.9-_O9T
+M,"_U at N0T`?6#[O`BD`$V='CPHW0"\'UX_U%C?0)_`U%CD`8*X$0'\)"`\J/@
+MD`58\)"`H^"T`120 at .7@5/OPD(#JX"#B#7T!?P2`#)"`Y>!$!/`B?0%_!-,0
+MKP'#P-"0@:'M\)"`ZN"0@:+PD(#DX/[$$Q-4`S#@`H$6[L03$Q-4`3#@`H$6
+MD(&BX/YO<`*!%N]P`F&-)/YP`F'&)/Y at 223\<`*!`23\8`*!%NZT#@*1EI"!
+MHN!P!'\!D;Z0@:+ at M`8"D7"0@:+ at M`0.D(&AX/]@!1)I at H`"\5>0@:+ at 9`A@
+M`H$6$F:'@1:0@:+@<`1_`9&^D(&BX+0&`I%PD(&BX+0.!Y$;OP$"D9:0@:+@
+M9`Q@`H$6D1OO9`%@`H$6D=B!%I"!HN"T#@>1&[\!`I&6D(&BX+0&`I%PD(&B
+MX+0,!Y$;OP$"D=B0@:+ at 9`1P7!)HU.]D`7!4L0Z`4)"!HN"T#@>1&[\!`I&6
+MD(&BX+0&`I%PD(&BX+0,!Y$;OP$"D=B0@:+@<`1_`9&^D(&BX+0$&A)IQ(`5
+MD(&BX+0,#I"`Y>#_$Q-4/S#@`O'GT-"2KR+Q:N]D`6`(D`&X=`'P@#V0 at .3@
+M_Q,3$U0?,.`(D`&X=`+P@"COQ%0/,.`(D`&X=`3P@!F0 at .G@TY0$0`B0`;AT
+M"/"`")`!N.3P?P$BD`&Y=`+P?P`BD(#EX)`&!"#@#.!$0/"0 at .IT!/"`"N!4
+M?_"0 at .IT#/"0!2+D\"*0 at .7@PQ, at X`B0 at .IT#/"`$9`&!.!$0/#@1(#PD(#J
+M=`3PD`4BY/`BD(&C[_`29 at R0@:/@8`60!2+D\)"`ZG0$\"*0@*/@9`%P+9"`
+MY>!4_?"0!2)T;_!_`1'FOP$.D(#DX$2`\)"`ZG0.\"*0`;ET`?"0`;@$\"*0
+M!2)T__#Q\9`!-W0"\/U_`U%C$F:0Y)"`ZO`BD(#GX&`MD("CX&0!<"60 at .[P
+M!&`>D(#KX$00\.3U'9"`[]'RD`%7=`7PD(#JX"#B`E'`(N]P-GUX?P*QHWT"
+M?P.QHWW(?P(29VZ0`5?D\)`!/'0"\'T!?PQ1Q)"`Y.!4]_!4[_"0!@K at 5/CP
+M(D%X?0)_`K&C?0%_`G0]+_CF_NWT7O[V=#`O]8+D-`'U@^[P(I"`Y^!@19"`
+MY>#_$Q,35!\PX!*0`3O@,.0+L9F0 at .W@%)`%<_"0 at 9GD=?`!$D2IPY"!FN"4
+M@)"!F>!D@)2`0`N0`9C at 5/[PX$0!\/&S`:^0 at .K@9`)@*A)J99"`Y>`3$Q-4
+M'S#@%9"`[>#_H^!O<`L29TJQF9"`[N`4\)`!YN`$\"*0`5_D\)`!/'0(\.3U
+M'9"`^N##$U1_]1[D^_U_7'X!T?R0`5]T!?"0!I)T`O"0 at .3@1!#PD(#JX&0,
+M8`KD_7\,4<3D_Q'F(I"`Y^!D`7!>D(#FX%0/8$Z0 at .K@<`/_D;Z0 at .K@9`Q@
+M`O%7D`%;Y/"0`3QT!/#Q:N]D`7`Q]1V0@/K at PQ-4?_4>Y/O]?UA^`='\D`%;
+M=`7PD`:2=`'PD(#DX$0(\"*0 at .K@<`)1P"+PY/4=D(#YX/4>Y/O]?U1^`8X9
+MCQKE'E0'Q#-4X(49 at X4:@O#E'50'Q#-4X/_E'A,3$U0?3Z/PZU0'Q#-4X/_E
+M'1,3$U0?3X4:@H49 at Z.C\+T!#(4:@HZ#HZ.C=`/P(H4:@H49 at Z.CHW0!\"*0
+M!@3 at 5'_PD`4BY/"0 at .IT#/`BD`0:X/1@`W\`(I`$&^!4!V0'?P%@`G\`(I"!
+M>!)%!A)HDI"`Y^#_L5Z0 at .?@8!F0 at 7@21/V0``$2'[U4#_^0``(2'[W]$FBC
+M(I"!!.`PX"R0 at 0?@!/#@_Y"!!>"U!QV0!I+ at 5!QP"A'DD($(X`3P@`:0!I)T
+M'/#DD($'\"(29I"0 at .IT"/`BY)"!G?"C\)`%^.!P#Z/@<`NCX'`'H^!P`W\!
+M(M.0 at 9[@E.B0 at 9W@E`-`"I`!P.!$(/!_`")_,GX`$C*JD(&=Y'7P`1)$J8"_
+MD`#WX"#G">!_`2#F#'\"(I``]^`PY@)_`R(1.9"``>_P$660`61T`?`"+:<1
+MTS$#$9(1L>3U-?4V]3?U.*TU?U`2,AZM-G]1$C(>K3=_4A(R'JTX?U,",AYU
+M/1#D]3YU/P=U0`*0`3#E/?"CY3[PH^4_\*/E0/`B=44.=48!0T80=4<#=4AB
+MD`$XY47PH^5&\*/E1_"CY4CP(I`!,.3PH_"C\*/PD`$X\*/PH_"C\/U_4!(R
+M'N3]?U$2,A[D_7]2$C(>Y/U_4P(R'I`!-'3_\*/PH_"C\)`!//"C\*/PH_#]
+M?U02,AY]_W]5$C(>??]_5A(R'GW_?U<",AZ0`(#@1(#]?X`2,AZ0_0#@5+_P
+M,<`2,G=Q>S&G?P$20Q60 at 0!T`O#_$D,5D($`X`3P?P,20Q60 at 0#@!/`14S&,
+MD`"`X$1`_7^`$C(>=2#_,;&1<>3_`D.>,:LQN+%#,<B0 at 03@5/[PHW0#\*/P
+MY*/PH_`BY/5-(N20@*/P(G7H`W6HA"+DD("=\*/P(I`!E.!$`?`BD($!X%3^
+M\%1_\*-T"O#DH_`B,902'Z3_5`'^D($$X%3^3O#OPQ,PX!20``$2'[V0 at 07P
+MD``"$A^]D($&\"*0 at 74210;O$D4/4C(`4CH!4D("4DH#4E($4EH at 4F(A4FHC
+M4G(E4GK```!2 at I"!=1)$_8$ID(%U$D3]@$B0 at 7421/UAJY"!=1)$_6%;D(%U
+M$D3]@("0 at 7421/V!QY"!=1)$_6'CD(%U$D3]83&0 at 7421/UA.9"!=1)$_6%)
+MD`'`X$0!\"*0 at 7@210:0``$2'[W__A(?I/W#$S#@$I"!>!)$_9```A(?O9"!
+M?/"`!9"!?._PD(%[[O"0 at 7S@_I"!>^#_TYY0.)"!>!)$_1(?I%0!_G2C+_6"
+MY#2`]8/N\'2C+_6"Y#2`]8/@<`1Q,(`'D(%[X/]Q+Y"!>^`$\("ZD("CX'`E
+MD(#JX'`$_Q),OI"`ZN!D#&`#$D]7D(#DX%3W\%3O\%2_\%1_\"(B(A(?I)"`
+M\?`B$A^DD(#_\)"`_^"0`>?P(A(?I)"!"?"0``$2'[V0 at 0KP(A(?I/]4`?Z0
+M at 0'@5/Y.\._#$S#@"I```1(?O9"!`O`BD`$!X$0$\)`!G'1^\*-TDO"C=*#P
+MHW0D\)`!FW1)\)`!FG3@\)`!F>3PD`&8!/`BTQ"O`</`T!(?I/^0 at ./POP$2
+MD``!$A^]9`%@%Y`%(G1O\(`/D``!$A^]9`%@!9`%(N3PT-"2KR*0``(2'[W_
+M,.`F$A^DD(#X\)```1(?O9"`^?#O5/[_H^!4`4_PD``#$A^]D(#[\"*0@/AT
+M`?"C=`?PH^!4`40H\*-T!?`BD`()X/T2'Z3^KP7M+I"``O"0``$2'[W_[2^0
+M@`/PD``"$A^]_^TOD(`$\)```Q(?O?_M+Y"`!?"0``02'[W_K at 7M+Y"`!O`B
+MY)"!$/"C\)`!F.!_`##D`G\![V0!8#[#D($1X)2(D($0X)030`B0`<'@1!#P
+M(I"!$.1U\`$21*E_%'X`$C*JTY"!$>"4,I"!$."4`$"YD`'&X##CLB(2'Z3_
+M5'^0 at .?P[\03$Q-4`:/PD``!$A^]_U3PQ%0/_I"`YN!4\$[PD``#$A^]5`$E
+MX/Z0 at .3@5/U.\.]4#\14\/^0 at .;@5`]/\)``!!(?O9"`Z?`23X.0`;ET`?"0
+M`;CPD(#GX)`!NO"0 at .G@D`&[\)"`YN!4#Y`!OO`BY)"`Y_"C\)"`YN!4#_!4
+M\/"0 at .3@5/WP5/?P5._PD(#M=`'PH_"0 at .3@5/OPH^!4^_#DD(#P\)"`[W0'
+M\)"`\N3PHW0"\.20 at .OPD(#DX%3^\)"`Z70,\)"`Y.!4W_"0 at .IT#/"0 at .3@
+M5+_P5'_PH^!4_O!4_?!4]_"0@/02(-H`````D(`!X+0!")"`\729\(`2D(`!
+MX)"`\;0#!720\(`#=$#PD(#X=`'PHW0'\*/@5`%$*/"C=`7PY*/PH_"C\*/P
+M(M,0KP'#P-"0`<S at 5`^0 at 6OPD(%KX/UP`N$QD(&7X/]T`7X`J`<(@`7#,\XS
+MSMCY_^]=<`+A*I"!E^!U\`20`=`21/'@D(%L\'43`744 at 745;'46`7L!>H%Y
+M;1(K[9"!E^!U\`20`=$21/'@D(%N\)"!E^!U\`20`=(21/'@D(%O\)"!E^!U
+M\`20`=,21/'@D(%P\)"!E^!U\`20`?`21/'@D(%Q\)"!E^!U\`20`?$21/'@
+MD(%R\)"!E^!U\`20`?(21/'@D(%S\)"!E^!U\`20`?,21/'@D(%T\)"!:^#_
+MD(&7X/YT`:@&"(`"PS/8_/1?D(%K\)"!E^#_=`&H!PB``L,SV/R0`<SPD(%M
+MX/][`7J!>6Y1!I"!E^`$\.!4`_#!&)`!P.!$`O#0T)*O(N3[^OU_`1)$3I"!
+M:N_P8/#1!X#LY)"!$O"0 at 1+@9`'P)$J0`<3P=%>C\)"`ZN#_D(#IX&]@`Q)'
+MIA)B^[\!`O&%$C*>OP$#$EY&$D)-@,K3$*\!P\#0D(#DX##@`O&:T-"2KR*0
+M at .K@<`X2:52_`0CQKY`!Y>`$\"+3$*\!P\#0$F<$\<#0T)*O(A)F_)``".!4
+M[_U_"!(R'N3_CU#DD($3\*/PD`$)X'\`,.<"?P'O95!@/L.0 at 13@E(B0 at 1/@
+ME!-`")`!P.!$$/`BD($3Y'7P`1)$J7\4?@`2,JK3D($4X)0RD($3X)0`0+F0
+M`<;@,."R(N3[^OU_`1)$3I"!?>_P8/`1/8#LTQ"O`</`T.3_D(">X/Z0@)W@
+M_;4&!'X!@`)^`.YD`6`RD`&OX'`3[77P#Z0D!_ET@#7P^GL!$95_`>]@%I"`
+MG>`$\.!_`+0*`G\![V`%Y)"`G?#0T)*O(M,0KP'#P-"0 at 7X210:0 at 9C@_P3P
+MD``![Q(?_'^O?@$1^.]@.I"!?A)$_8L3BA2)%9``#A(?O20"]19[`7H!>:`2
+M*^V0 at 7X21/V0``X2'[V0`:[PHW3_\)`!R^!D@/#0T)*O(M,0KP'#P-"0 at 8ON
+M\*/O\.2C\*/PD(&+X/ZCX/6"CH/@8"W#D(&.X)3HD(&-X)0#0`N0`<#@1(#P
+M?P"`%9"!C>1U\`$21*E_"GX`$C*J@,5_`=#0DJ\BD(%%[_"C[?"C$B#:````
+M`.20 at 5/P?R1^"!(M7)"!2Q(@SI"!1>#[<`B0 at 4L21-F`%NMU\`BD)&+U at N0T
+MA_6#X/ZCX/\2+5R0 at 4\2(,Z0 at 4;@_^3\_?YX%Q(@NZ@$J06J!JL'D(%/$D39
+M[51__>Q4@/P21,SL1(#\D(%/$B#.D(%+$D39[%1__)"%NQ(@SG\D?@@2+J*0
+M at 47@=?`(I"1B]8+D-(?U@^#^H^#_P`;`!Y"!3Q)$V9"%NQ(@SM`'T`82+J*0
+M at 4L21-GL1(#\D(6[$B#.?R1^"!(NHI"!1>!P!'\@@`F0 at 47@M`$6?RA^"!(M
+M7'@($B"H[U0!_^20 at 5/O\)"!4^"0 at 45@#N!U\`BD)&;U at N0TAX`,X'7P"*0D
+M9/6"Y#2']8/@_J/@_Q(M7.U4#_WD_)"!1Q(@SI"!1P)$V=,0KP'#P-`Q3M#0
+MDJ\BD($E$D4&$A^DD($I\)```1(?O9"!*/"0``(2'[V0 at 3OPD``#$A^]D($\
+M\)"!)1)$_>DD!/GD.HL3]12)%746!'L!>H%Y/1(K[9"!)1)$_>DD"/GD.HL3
+M]12)%746!'L!>H%Y01(K[9"!*>`D^&!Y)/Q@=20(8`*!W)"!*."T`042*<6!
+MWY"!*."T`@42$;V!WY"!*."T`P42!NN!WY"!*."T$!F0 at 3S@_I"!.^#][?^0
+M at 2KN\*/O\!(RJH'?D($HX+01&9"!/.#^D($[X/WM_Y"!*N[PH^_P$C(&@=^0
+M at 2C@]&`"@=__(I"!*>"T#`B0 at 3IT`?"`!>20 at 3KPD($HX&0'8`*!KY"!.^"0
+M at 3CPD($\X)"!.?"0 at 3[@_^3\_?YX"!(@NZ@$J06J!JL'D($]X/_D_/W^$D3,
+MP`3`!<`&P`>0 at 3_@_^3\_?YX$!(@N]`#T`+0`=``$D3,D($L$B#.D($YX/^0
+M at 3C@_5&-D($P$B#.D($ZX'`"@9>0 at 4+@_^3\_?YX"!(@NZ@$J06J!JL'D(%!
+MX/_D_/W^$D3,P`3`!<`&P`>0 at 4/@_^3\_?YX$!(@N]`#T`+0`=``$D3,D($T
+M$B#.D($T$D39$B";D($P$D3E$D2_P`3`!<`&P`>0 at 2P21-F0@3021.421+_0
+M`]`"T`'0`!)$S)"!+!(@SI"!+!)$V9"!1Q(@SI"!..#]H^#_D>*`,)"!.^#_
+MH^#]D($ZX)"!2/![`7J!>3VC$D4&>H%Y09"!3!)%!I"!*.#[\9.``W\"(G\!
+M(M,0KP'#P-#`!\`%D(%'$D39D(%-$B#.T`70![$$T-"2KR*0 at 4OO\*L%D(%1
+M$B#:`````*\#Y/S]_G at 4$B"[J`2I!:H&JP>0 at 4T21-GM5`_]Y/P21,SL5`_\
+MD(%1$B#.D(%+X'7P"*0D8/6"Y#2']8/@_J/@_\`&P`>0 at 5$21-F0A;L2(,[0
+M!]`&`BZBD`()X)"!$_"C="#PD($3X/\PX`6CX"2`\._#$Y#]$/#DD($D\)"!
+M%.`D`/6"Y#3\]8/@D($6\)"!).!D`?`D;I`!Q/!T7:/PD($6X/]D!&`*[V0(
+M8`7O9`QP>N20 at 17PD($6X/^0 at 17@_L.?4#_ at _Y"!%.#]+R0`]8+D-/SU@^#\
+M=!<O]8+D-('U@^SP[O_M+__D,_[O]$YP"Y#]$.`$\.20 at 13PD($5X`3P at +-[
+M`7J!>1=1FY"!(^_PPY0"4!:0 at 2/@8`V0 at 17@_Y"!%.`O\*&3?P$B?P`B$BVG
+MY/52$C*>[V!R8U(!Y5(D1I`!Q/!T7J/PD`"(X/50]5%4#V#?Y5`PX`L at Y`,2
+M*<534>Z`/N50,.$6(.4.$A&][W`#0U$@D`$&Y/!34?V`(^50,.(+(.8#$@;K
+M4U'[@!/E4##C#B#G"+%N[W`#0U&`4U'WK5%_B!(R'H"((I"!@>_PH^WPK0.L
+M`N20 at 8GPH_"0`<1TQ?!T7J/P[%0__)`!0.WPK at 3NH_"0 at 8'@)(%@-"3:8!PD
+M/'!!D(&"X,0S,S-4@)"!AO"C=&GPHW2`\(`LD(&"X%0!D(&&\*-TI?"C=`'P
+M@!B0 at 8+@Q%00D(&&\*-T?_"C=!#P@`-_`"*0 at 8?@D`$&\)"!AN!@#I`!0O"0
+M at 87@D`%#\(`-D`%#Y/"0 at 8;@D`%"\)"!B.#_D`%"X%__D(&&X&]@[G3%!)`!
+MQ/!T7J/PD`%#Y/!_`2(BD(%%[_"C[?"CZ_"0 at 4D21/V+$XH4B15U%@1[`7J!
+M>6(2*^V0 at 4P21/V+$XH4B15U%@1[`7J!>682*^V0 at 4;@_I"!1>#][?^0 at 4_N
+M\*/O\)"!1^#_M`0(D(%2=`'P@`_OD(%2M`4%=`+P@`-T!/#3D(%0X)3_D(%/
+MX)0`0`(!DN20 at 5'PD(%2X/^0 at 5'@_L.?0`)!]'1B+O6"Y#2!]8/@D(%3\.[_
+MD(%0X"__D(%/X#0`CX+U@^"0 at 53PD(%(X&`ED(%1X"1F]8+D-('U@^"0 at 5WP
+MX/_T_I"!5.!>_I"!4^#][UU.\)"!3Z/@_Z/@+_^0 at 5/@_1(R'I"!4>`$\("%
+MTY"!4."4_Y"!3^"4!U!XY)"!4?"0 at 5+@_Y"!4>#^PY]``D'T=&(N]8+D-('U
+M@^"0 at 5/P[O^0 at 5#@+_N0 at 4_@-`#ZBX+U@^"0 at 53PD(%(X&`ED(%1X"1F]8+D
+M-('U@^"0 at 5WPX/_T_I"!5.!>_I"!4^#][UU.\)"!4^"+ at HJ#\)"!4>`$\("-
+MY)"!4_"0 at 5X2(-H`````D(%5$B#:`````)"!2.!@$9"!3^#^H^#_$BU<D(%9
+M$B#.Y)"!4?"0 at 5+@_Y"!4>#^PY]``D$?=&(N]8+D-('U@^"0 at 5/PD(%(X&!W
+MD(%1X/LD9O6"Y#2!]8/@D(%=\)"!61)$V>MU\`BD^?@2(*B0 at 5W@_O1?_Y"!
+M4^#][EU/\)"!7A)$Y<``P`'``L`#D(%=X/]^`)"!4>!U\`BD_>^H!0B`!<,S
+MSC/.V/G_[C.5X/W\T`/0`M`!T``21,R0 at 5X2(,Z0 at 5421.7``,`!D(%3X/_D
+M_/W^D(%1X'7P"*3Y^!(@N]`!T``21,R0 at 542(,Z0 at 5'@!/`A3I"!2.!@.I"!
+M7A)$V1(@FY"!61)$Y1)$O\`$P`7`!L`'D(%5$D39D(%>$D3E$D2_T`/0`M`!
+MT``21,R0 at 542(,Z0 at 5421-F0A;L2(,Z0 at 4_@_J/@_Q(NHI"!1^"0`:#PD(%2
+MX)`!H?"0 at 4C@D`&B\)"!21)$_1(?I)`!I/"0``$2'[V0`:7PD``"$A^]D`&F
+M\)```Q(?O9`!I_"0 at 5421-F0`:CO\)"!51)$V7@($B"HD`&I[_"0 at 5421-EX
+M$!(@J)`!JN_PD(%5$D39>!@2(*B0`:OO\"*/#2*/#B)_`I"!`.#^[\.>4!CO
+M)>`D@?CF,.0+D`&X=`CPH_!_`"(/@-Y_`2*0`33 at 53WU0:/@53[U0J/@53_U
+M0Z/@54#U1)`!-.5!\*/E0O"CY4/PH^5$\"*0`3S at 547U2:/@54;U2J/@54?U
+M2Z/@54CU3)`!/.5)\*/E2O"CY4OPH^5,\%.1WR*0@*/@9`%P&9"`Y^!@$Y`!
+M5^3PD`$\=`(23NN0`5=T!?`BD(#GX&`UD`:2X##@).3U'9"`^N##$U1_]1[D
+M^_U_6'X!$D[\D`%;=`7PD`:2=`'P(I"`Y.!4]_`21Z8BD(#GX&`UD`:2X##A
+M).3U'9"`^N##$U1_]1[D^_U_7'X!$D[\D`%?=`7PD`:2=`+P(I"`Y.!4[_`2
+M1Z8BD7&0 at 0SO\)"`Y##@!N!$`?"`!.!4_O"0 at 0S@,.81D`$OX##G!.3P@`:0
+M`2]T@/"0 at .3@,.`:D(#RY/"C=`?PD(#RH^"0!5CPD`3LX%3=\"*0!.S at 1"+P
+M(N20 at 0WPH_"C\)``@^"0 at 0WPD`"#X/Z0 at 0W@_[4&`2+#D($/X)1DD($.X)0`
+M0`V0`<#@1$#PD($-X/\BD($.Y'7P`1)$J8#"D($)X&`/Y/"0!5/@1`'PD`7]
+MX`3P(I"`Y.#_Q!,35`,PX"?O5+_PD`3 at X)"`Y3#@!N!$`?"`$.!4_O"0`;ET
+M`?"0`;AT!/`21Z;D_Y"!!.`PX$B0 at 0C@_6!!=`%^`*@'"(`%PS/.,\[8^?^0
+M!.#@^^];8`;DD($(\"*0 at 0;@TYU0$)`!QW00\+%4D($$X%3^\"(22.20 at 0C@
+M!/`BD(`!X&0"8`>0!I#@1`'P(I"`Y.#_Q!,3$U0!,.`L[U1_\)`$X."0 at .4P
+MX0;@1`+P@`_ at 5/WPD`&Y=`'PD`&X!/"0 at .?@8`,21Z9_`:$$TQ"O`</`T)`$
+M'>!@&I`%(N!4D&`'D`'`X$0(\)`!QN`PX>1_`(`"?P'0T)*O(L/NE`%`"@WM
+M$Y#]$/#D+_\BP^Z4`4`DD/T1X&UP&I`!%^"U!0V0`>1T=_"0_1'D\(`&[020
+M_1'PY"__(M,0KP'#P-"0`0'@1`+PD`$`=/_PD`:W=`GPD`:T=(;P?WQ^"!(M
+M7.Q4?_R0 at 8\2(,Z0 at 8\21-F0A;L2(,Y_?'X($BZBD(6[$B#:S,``P'^,?@@2
+M+J*0A;L2(-H`P``4?W!^#A(NHI"%EA(@V@`#/F#D_?\2,4W0T)*O(M$,D(#J
+M=`SP(A)/\9"%NQ(@VLSP`,!_C'X($BZBD(6[$B#:````%']P?@X2+J*0A982
+M(-H`````Y/W_$C%-?WQ^"!(M7.Q$@/R0 at 9,2(,Z0 at 9,21-F0A;L2(,Y_?'X(
+M$BZBD`$`=#_PH^!4_?"0!5/@1"#P(I``D.`@X/DBD(#QX/U_DQ(R'I"`Z.!@
+M$I`!+^`PYP5T$/"`!I`!+W20\)``".!$$/U_"!(R'G\!$E?1D`"0X$0!_7^0
+M$C(>?Q1^``(RJN\4D`5S\)`!/W00\/U_`W1%+_CF3?[V=#@O]8+D-`'U@^[P
+M(G1%+_CF_NWT7O[V=#@O]8+D-`'U@^[P(M,0KP'#P-"0@:#M\)"!G^_PTY0'
+M4'#@_W0!J`<(@`+#,]C\]/^0`$?@7_U_1Q(R'I"!G^#_=`&H!PB``L,SV/S_
+MD`!&X$_]?T82,AZ0@:#@8!B0 at 9_@_W0!J`<(@`+#,]C\_Y``1>!/@!>0 at 9_@
+M_W0!J`<(@`+#,]C\]/^0`$7 at 7_U_18!^D(&?X"3X\.`D!/]T`:@'"(`"PS/8
+M_/3_D`!#X%_]?T,2,AZ0 at 9_@_W0!J`<(@`+#,]C\_Y``0^!/_7]#$C(>D(&@
+MX&`=D(&?X"0$_W0!J`<(@`+#,]C\_Y``0N!/_7]"@!R0 at 9_@)`3_=`&H!PB`
+M`L,SV/ST_Y``0N!?_7]"$C(>T-"2KR*0 at .3@5/OPY)"`\/"0 at .OP(N\D_F`,
+M!'`HD(#M=`'PH_`B[7`*D(#[X)"`[?"`!9"`[>WPD(#MX*/PD(#EX$0(\"(2
+M3VKO9`%@")`!N'0!\(!GD(#KX/]4`V`(D`&X=`+P@%:0 at .G@_N3#GE`(D`&X
+M=`3P@$3O,.((D`&X=`CP@#B0 at .O@,.0(D`&X=!#P@"F0 at .7@$Q-4/R#@")`!
+MN'0@\(`6D(#_X&`(D`&X=(#P@`B0`;CD\'\!(I`!N70$\'\`(I`"A^!@")`!
+MN'0!\(`7D`*&X"#A")`!N'0$\(`(D`&XY/!_`2*0`;ET"/!_`"+O8#Z0@*/@
+M9`%P-I"`Y>!4_O"0!2)T#_"0!@3 at 5+_PY/\22.:_`0Z0 at .3@1$#PD(#J=`;P
+M(I`!N70!\)`!N'0(\"*0!2)T;_"0!2?@5+_PD(#J=`+P(N20 at 0OPD`:IX)"!
+M"_#@5,!P#9"`Z^!4_O!4_?`"1Z:0 at 0O@,.8BD(#GX&0!<"&0 at .O@1`'PD(#F
+MX%0/9`)@!%%*@`P23CV`!Y"`Z^!4_O"0 at 0O@D(#K,.<4X$0"$D[KD`%7=`7P
+MD(#DX$0$\"+ at 5/WP(I`$'>!P%)"``^#_Y/T22?F.3H]/D`0?="#P(I"`H^!D
+M`6`"0?J0 at .?@<`)!^I"`YN#$5`]D`7`BD`:KX)"`[O"0!JK at D(#M\*/@_W`(
+MD(#MX/[_@`"0 at .[O\)"`Y>!$!/#DD(#P\)"`\J/@D`58\)`!5^3PD`$\=`+P
+MD(#KX%3]\%3O\)"`YN#_Q%0/)/U0`H`",=B0 at .7@$Q,35!\PX!"0 at .W@_Z/@
+MM0<&$F=*$DV?(I"`Y.#_$Q-4/S#@$>]4^_"0 at .O@5/WP5`=P0H`]D(#PX`3P
+MD(#KX%3O\)"`\.#_M`$"@`3OM`(&D`58X`3PD(#XX/^0@/#@TY]`#Y"`H^"T
+M`0N0 at .7@5/OP(A)'IB+D_N_#$_WO,.`$[B2`_I#]$.WPKP8BJP>J!NTK^^0Z
+M^L.0@*#@FY"`G^":4!.CX"0!_Y"`G^`T`/[#ZY_[ZI[ZZI#]$?"O`W0`+_6"
++Y#3[]8/@_R(`,@@`
+`
+end
+begin 644 rtwn-rtl8188eefw.fw
+MX8 at 0``@````0)2%6L"L``*($```````````````````"134`````````````
+M````````P58`````````````````````````````````````````````````
+M````````````H<T```````#A_```````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````,*O@/XR$D($A=`+==`(JN#"C.6*)&?UBN6,-'GUC-*,["2)^.:\`P)T
+M_\.5@;1``$#.>01X@!;F"'`+PJ_F,.$#1!CVTJ\(V>WJB]`BY0S_(R2!^`\(
+M"+\$!'\`>('F,.3R`.4,PY]0(`4,=(@E#/CF_::!".:N#+X#`G3_S?CH;6#@
+M".;`X(#VY0S3GT`GY0PDB?CFK at R^`P)T__T8YLWXY8%M8`;0X/88@/7E#"2(
+MR/85#(#3Y0PC)('X?P3"K^8PX`,0X at Q_`##A!S#C!'\(5/14?,;2KU2`0@<B
+M>(BF at 70#8`;_"';_W_M_!.1X@/8(]@C?^GB!=C"01<5T`9/`X.23P.!#B0%U
+MBF!UC'G2C-*O(@/OTY0#0`-__R)T at 2\O^.8 at Y?3"K^9$,/;2KZX,[L.?4"$.
+M=(@N^.;Y".88O@,"=/_][6E@"0GG&1GW"0F`\Q86 at -KNTY]`!`6!!8'NTY]`
+M(G2(+O@(YOGNM0P"J8$8!@;F_>UI8`D9&><)"?<9@/,>@-GO)(CXY at 3X[R\$
+MD$7%D_8([R^3]G\`(N_3E`-``W__(N\C)('XYC#E],*OYE2,]M*OY0RU!PIT
+MB"_XYO6!`D)-4"YTB2_XYK\#`G3__1CF^72(+_C[YOSI;&`(J`7G]AT9@/2H
+M`Z8%'^4,M0?C?P`B=(DO^.;]&(8!#W2(+_BF`0B&!.4,M0<"K('M;&`(#0FH
+M!>;W@/3E#+4'WHF!?P`B[].4`T`#?_\B[R,D@?C"K^8PY04PX`+2Y-+BQM*O
+M?P`PX@$/`D),C_#D__[E#",D@/C"J3#W#7\(YF`++?9@,%`N@`<P\0;M]F`E
+M?@((,/`0PJ_F$.<C#C#B#-*O?P2`$L*OYA#G$U3L3O;2KP)"37\(".]$@_3"
+MKU;&TJ]4@$__(L7P^*/@*/#%\/CE at A6"<`(5@^`X\"+O6__N6O[M6?WL6/PB
+M[TO_[DK^[4G][$C\(N#\H^#]H^#^H^#_(N#XH^#YH^#ZH^#[(J0E at O6"Y?`U
+M at _6#(N#[H^#ZH^#Y(NOPH^KPH^GP(M"#T(+XY)-P$G0!DW`-HZ.3^'0!D_6"
+MB(/D<W0"DVA@[Z.CHX#?`D5S`D+=Y).C^.23HT`#]H`!\@C?](`IY).C^%0'
+M)`S(PS/$5`]$(,B#0`3T5H`!1O;?Y(`+`0($"!`@0("01;CD?@&38+RC_U0_
+M,.4)5!_^Y).C8`$.SU3`)>!@J$"XY).C^N23H_CDDZ/(Q8+(RL6#RO"CR,6"
+MR,K%@\K?Z=[G at +X`08&7`$&!F`!!@:0`43172E<V6"G`X,#PP(/`@L#0==``
+MP`#``<`"P`/`!,`%P`;`!Y`!Q'3-\'1%H_#1''3-!)`!Q/!T1:/PT`?0!M`%
+MT`30`]`"T`'0`-#0T(+0@]#PT.`RD`!4X%4U]3FCX%4V]3JCX%4W]3NCX%4X
+M]3RM.7]4$C(>K3I_51(R'JT[?U82,AZM/']7$C(>4Y'O(L#@P/#`@\""P-!U
+MT`#``,`!P`+``\`$P`7`!L`'D`'$=%;P=$:C\!)C(N5!,.0$?P*1)^5#,.`"
+MT?3E0S#A`Q)-N^5#,.(#$DX*Y4,PXP,28W_E0S#D`O&PY4,PY0+QWN5#,.8"
+M\8OE1##A`M'J=%8$D`'$\'1&H_#0!]`&T`70!-`#T`+0`=``T-#0 at M"#T/#0
+MX#*0 at .?@8`,23H0BD($*X&`/Y/"0!5/@1`+PD`7\X`3PY/^0 at .?@8'F0@*/@
+M9`%P<9"`YN#$5`]@)"3^8`,$<!^0 at .[@%/#@_F`&D(#PX&`/[G`&D(#MX*/P
+M?P&``G\![V`_D(#KX$00\)"`\.!@`[0!">3U'9"`\."`#>3U'9"`\.!U\`.D
+M)/[_D(#OX"\23O.0`5=T!?"0 at .K@(.(#$DK`(I"`H^"T`1.0 at .?@8`V0 at .O@
+M5/[P5`=P`O&F(I"`Z>#_?0$"2L20@*/@9`%P)9"`Y^!@'Y`!5^3PD`$\=`+P
+MD(#DX%3[\)"`Z^!4_?!4!W`"\:8BD("CX+0!%I"`Y^!@$)"`YN!4#V0"8`,"
+M:DH23CTBP.#`\,"#P(+`T'70`,``P`'``L`#P`3`!<`&P`>0`<1T_/!T1Z/P
+M$F-/Y4DPX0(1E.5),.(#$F.AY4DPXP,28]WE2C#@`Q)D&>5*,.0#$F2XY4PP
+MX05_`Q)$)^5,,.0"$9[E3##E`Q)DSN5,,.8#$F5D=/P$D`'$\'1'H_#0!]`&
+MT`70!-`#T`+0`=``T-#0 at M"#T/#0X#*0 at .?@8`,2:OLBL2J0 at .W@%)`%<_!]
+M`G\"46.0 at 0'@,.`MD("CX+0!)I"!I.`$\."T"@N0 at 0/@!/#DD(&D\)"!`^#_
+MD($"X+4'!>2C\!'D(N3_CU.0!!W at 8!B0!2+@]59T__#Q\;\!`C%<D`4BY5;P
+M@`(Q7)`$'W0@\'\!(G0?+?6"Y#3\]8/@5#_P[V`=="$M]8+D-/SU@^!$$/!T
+M'RWU at N0T_/6#X$2`\")T(2WU at N0T_/6#X%3O\'0?+?6"Y#3\]8/@1$#P(I"`
+M!.#_?0$Q^8Y4CU6M5:Q4KU,Q$:]5KE20!(#@5`_]K`=T$2SU at N0T_/6#X$0!
+M\'01+/6"Y#3\]8/@5/OPK`=T%BSU at N0T_/6#X$3Z\'05+/6"Y#3\]8/@1!_P
+MK`=T!BSU at N0T_/6#X$0/\)`$4^3PD`12\)`$473_\)`$4'3]\'04+/6"Y#3\
+M]8/@5,!-_704+_6"Y#3\]8/M\"+3$*\!P\#0D(&<[?"0 at 9OO\.3]_!)K67P`
+MK0>0 at 9O@D`0E\)"!G.!@#G0/+_6"Y#3\]8/@1(#PKP5T""_U at N0T_/6#Y/!T
+M"2_U at N0T_/6#X%3P\'0A+?6"Y#3\]8/@5/?PK at 2O!=#0DJ\B=#TO^.9-_O9T
+M,"_U at N0T`?6#[O`BD`$V='CPHW0"\'UX_U%C?0)_`U%CD`8*X$0'\)"`\J/@
+MD`58\)"`H^"T`120 at .7@5/OPD(#JX"#B#7T!?P2`#)"`Y>!$!/`B?0%_!-,0
+MKP'#P-"0@:'M\)"`ZN"0@:+PD(#DX/[$$Q-4`S#@`H$6[L03$Q-4`3#@`H$6
+MD(&BX/YO<`*!%N]P`F&-)/YP`F'&)/Y at 223\<`*!`23\8`*!%NZT#@*1EI"!
+MHN!P!'\!D;Z0@:+ at M`8"D7"0@:+ at M`0.D(&AX/]@!1)I at H`"\5>0@:+ at 9`A@
+M`H$6$F:'@1:0@:+@<`1_`9&^D(&BX+0&`I%PD(&BX+0.!Y$;OP$"D9:0@:+@
+M9`Q@`H$6D1OO9`%@`H$6D=B!%I"!HN"T#@>1&[\!`I&6D(&BX+0&`I%PD(&B
+MX+0,!Y$;OP$"D=B0@:+ at 9`1P7!)HU.]D`7!4L0Z`4)"!HN"T#@>1&[\!`I&6
+MD(&BX+0&`I%PD(&BX+0,!Y$;OP$"D=B0@:+@<`1_`9&^D(&BX+0$&A)IQ(`5
+MD(&BX+0,#I"`Y>#_$Q-4/S#@`O'GT-"2KR+Q:N]D`6`(D`&X=`'P@#V0 at .3@
+M_Q,3$U0?,.`(D`&X=`+P@"COQ%0/,.`(D`&X=`3P@!F0 at .G@TY0$0`B0`;AT
+M"/"`")`!N.3P?P$BD`&Y=`+P?P`BD(#EX)`&!"#@#.!$0/"0 at .IT!/"`"N!4
+M?_"0 at .IT#/"0!2+D\"*0 at .7@PQ, at X`B0 at .IT#/"`$9`&!.!$0/#@1(#PD(#J
+M=`3PD`4BY/`BD(&C[_`29 at R0@:/@8`60!2+D\)"`ZG0$\"*0@*/@9`%P+9"`
+MY>!4_?"0!2)T;_!_`1'FOP$.D(#DX$2`\)"`ZG0.\"*0`;ET`?"0`;@$\"*0
+M!2)T__#Q\9`!-W0"\/U_`U%C$F:0Y)"`ZO`BD(#GX&`MD("CX&0!<"60 at .[P
+M!&`>D(#KX$00\.3U'9"`[]'RD`%7=`7PD(#JX"#B`E'`(N]P-GUX?P*QHWT"
+M?P.QHWW(?P(29VZ0`5?D\)`!/'0"\'T!?PQ1Q)"`Y.!4]_!4[_"0!@K at 5/CP
+M(D%X?0)_`K&C?0%_`G0]+_CF_NWT7O[V=#`O]8+D-`'U@^[P(I"`Y^!@19"`
+MY>#_$Q,35!\PX!*0`3O@,.0+L9F0 at .W@%)`%<_"0 at 9GD=?`!$D2IPY"!FN"4
+M@)"!F>!D@)2`0`N0`9C at 5/[PX$0!\/&S`:^0 at .K@9`)@*A)J99"`Y>`3$Q-4
+M'S#@%9"`[>#_H^!O<`L29TJQF9"`[N`4\)`!YN`$\"*0`5_D\)`!/'0(\.3U
+M'9"`^N##$U1_]1[D^_U_7'X!T?R0`5]T!?"0!I)T`O"0 at .3@1!#PD(#JX&0,
+M8`KD_7\,4<3D_Q'F(I"`Y^!D`7!>D(#FX%0/8$Z0 at .K@<`/_D;Z0 at .K@9`Q@
+M`O%7D`%;Y/"0`3QT!/#Q:N]D`7`Q]1V0@/K at PQ-4?_4>Y/O]?UA^`='\D`%;
+M=`7PD`:2=`'PD(#DX$0(\"*0 at .K@<`)1P"+PY/4=D(#YX/4>Y/O]?U1^`8X9
+MCQKE'E0'Q#-4X(49 at X4:@O#E'50'Q#-4X/_E'A,3$U0?3Z/PZU0'Q#-4X/_E
+M'1,3$U0?3X4:@H49 at Z.C\+T!#(4:@HZ#HZ.C=`/P(H4:@H49 at Z.CHW0!\"*0
+M!@3 at 5'_PD`4BY/"0 at .IT#/`BD`0:X/1@`W\`(I`$&^!4!V0'?P%@`G\`(I"!
+M>!)%!A)HDI"`Y^#_L5Z0 at .?@8!F0 at 7@21/V0``$2'[U4#_^0``(2'[W]$FBC
+M(I"!!.`PX"R0 at 0?@!/#@_Y"!!>"U!QV0!I+ at 5!QP"A'DD($(X`3P@`:0!I)T
+M'/#DD($'\"(29I"0 at .IT"/`BY)"!G?"C\)`%^.!P#Z/@<`NCX'`'H^!P`W\!
+M(M.0 at 9[@E.B0 at 9W@E`-`"I`!P.!$(/!_`")_,GX`$C*JD(&=Y'7P`1)$J8"_
+MD`#WX"#G">!_`2#F#'\"(I``]^`PY@)_`R(1.9"``>_P$660`61T`?`"+:<1
+MTS$#$9(1L>3U-?4V]3?U.*TU?U`2,AZM-G]1$C(>K3=_4A(R'JTX?U,",AYU
+M/1#D]3YU/P=U0`*0`3#E/?"CY3[PH^4_\*/E0/`B=44.=48!0T80=4<#=4AB
+MD`$XY47PH^5&\*/E1_"CY4CP(I`!,.3PH_"C\*/PD`$X\*/PH_"C\/U_4!(R
+M'N3]?U$2,A[D_7]2$C(>Y/U_4P(R'I`!-'3_\*/PH_"C\)`!//"C\*/PH_#]
+M?U02,AY]_W]5$C(>??]_5A(R'GW_?U<",AZ0`(#@1(#]?X`2,AZ0_0#@5+_P
+M,<`2,G=Q>S&G?P$20Q60 at 0!T`O#_$D,5D($`X`3P?P,20Q60 at 0#@!/`14S&,
+MD`"`X$1`_7^`$C(>=2#_,;&1<>3_`D.>,:LQN+%#,<B0 at 03@5/[PHW0#\*/P
+MY*/PH_`BY/5-(N20@*/P(G7H`W6HA"+DD("=\*/P(I`!E.!$`?`BD($!X%3^
+M\%1_\*-T"O#DH_`B,902'Z3_5`'^D($$X%3^3O#OPQ,PX!20``$2'[V0 at 07P
+MD``"$A^]D($&\"*0 at 74210;O$D4/4C(`4CH!4D("4DH#4E($4EH at 4F(A4FHC
+M4G(E4GK```!2 at I"!=1)$_8$ID(%U$D3]@$B0 at 7421/UAJY"!=1)$_6%;D(%U
+M$D3]@("0 at 7421/V!QY"!=1)$_6'CD(%U$D3]83&0 at 7421/UA.9"!=1)$_6%)
+MD`'`X$0!\"*0 at 7@210:0``$2'[W__A(?I/W#$S#@$I"!>!)$_9```A(?O9"!
+M?/"`!9"!?._PD(%[[O"0 at 7S@_I"!>^#_TYY0.)"!>!)$_1(?I%0!_G2C+_6"
+MY#2`]8/N\'2C+_6"Y#2`]8/@<`1Q,(`'D(%[X/]Q+Y"!>^`$\("ZD("CX'`E
+MD(#JX'`$_Q),OI"`ZN!D#&`#$D]7D(#DX%3W\%3O\%2_\%1_\"(B(A(?I)"`
+M\?`B$A^DD(#_\)"`_^"0`>?P(A(?I)"!"?"0``$2'[V0 at 0KP(A(?I/]4`?Z0
+M at 0'@5/Y.\._#$S#@"I```1(?O9"!`O`BD`$!X$0$\)`!G'1^\*-TDO"C=*#P
+MHW0D\)`!FW1)\)`!FG3@\)`!F>3PD`&8!/`BTQ"O`</`T!(?I/^0 at ./POP$2
+MD``!$A^]9`%@%Y`%(G1O\(`/D``!$A^]9`%@!9`%(N3PT-"2KR*0``(2'[W_
+M,.`F$A^DD(#X\)```1(?O9"`^?#O5/[_H^!4`4_PD``#$A^]D(#[\"*0@/AT
+M`?"C=`?PH^!4`40H\*-T!?`BD`()X/T2'Z3^KP7M+I"``O"0``$2'[W_[2^0
+M@`/PD``"$A^]_^TOD(`$\)```Q(?O?_M+Y"`!?"0``02'[W_K at 7M+Y"`!O`B
+MY)"!$/"C\)`!F.!_`##D`G\![V0!8#[#D($1X)2(D($0X)030`B0`<'@1!#P
+M(I"!$.1U\`$21*E_%'X`$C*JTY"!$>"4,I"!$."4`$"YD`'&X##CLB(2'Z3_
+M5'^0 at .?P[\03$Q-4`:/PD``!$A^]_U3PQ%0/_I"`YN!4\$[PD``#$A^]5`$E
+MX/Z0 at .3@5/U.\.]4#\14\/^0 at .;@5`]/\)``!!(?O9"`Z?`23X.0`;ET`?"0
+M`;CPD(#GX)`!NO"0 at .G@D`&[\)"`YN!4#Y`!OO`BY)"`Y_"C\)"`YN!4#_!4
+M\/"0 at .3@5/WP5/?P5._PD(#M=`'PH_"0 at .3@5/OPH^!4^_#DD(#P\)"`[W0'
+M\)"`\N3PHW0"\.20 at .OPD(#DX%3^\)"`Z70,\)"`Y.!4W_"0 at .IT#/"0 at .3@
+M5+_P5'_PH^!4_O!4_?!4]_"0@/02(-H`````D(`!X+0!")"`\729\(`2D(`!
+MX)"`\;0#!720\(`#=$#PD(#X=`'PHW0'\*/@5`%$*/"C=`7PY*/PH_"C\*/P
+M(M,0KP'#P-"0`<S at 5`^0 at 6OPD(%KX/UP`N$QD(&7X/]T`7X`J`<(@`7#,\XS
+MSMCY_^]=<`+A*I"!E^!U\`20`=`21/'@D(%L\'43`744 at 745;'46`7L!>H%Y
+M;1(K[9"!E^!U\`20`=$21/'@D(%N\)"!E^!U\`20`=(21/'@D(%O\)"!E^!U
+M\`20`=,21/'@D(%P\)"!E^!U\`20`?`21/'@D(%Q\)"!E^!U\`20`?$21/'@
+MD(%R\)"!E^!U\`20`?(21/'@D(%S\)"!E^!U\`20`?,21/'@D(%T\)"!:^#_
+MD(&7X/YT`:@&"(`"PS/8_/1?D(%K\)"!E^#_=`&H!PB``L,SV/R0`<SPD(%M
+MX/][`7J!>6Y1!I"!E^`$\.!4`_#!&)`!P.!$`O#0T)*O(N3[^OU_`1)$3I"!
+M:N_P8/#1!X#LY)"!$O"0 at 1+@9`'P)$J0`<3P=%>C\)"`ZN#_D(#IX&]@`Q)'
+MIA)B^[\!`O&%$C*>OP$#$EY&$D)-@,K3$*\!P\#0D(#DX##@`O&:T-"2KR*0
+M at .K@<`X2:52_`0CQKY`!Y>`$\"+3$*\!P\#0$F<$\<#0T)*O(A)F_)``".!4
+M[_U_"!(R'N3_CU#DD($3\*/PD`$)X'\`,.<"?P'O95!@/L.0 at 13@E(B0 at 1/@
+ME!-`")`!P.!$$/`BD($3Y'7P`1)$J7\4?@`2,JK3D($4X)0RD($3X)0`0+F0
+M`<;@,."R(N3[^OU_`1)$3I"!?>_P8/`1/8#LTQ"O`</`T.3_D(">X/Z0@)W@
+M_;4&!'X!@`)^`.YD`6`RD`&OX'`3[77P#Z0D!_ET@#7P^GL!$95_`>]@%I"`
+MG>`$\.!_`+0*`G\![V`%Y)"`G?#0T)*O(M,0KP'#P-"0 at 7X210:0 at 9C@_P3P
+MD``![Q(?_'^O?@$1^.]@.I"!?A)$_8L3BA2)%9``#A(?O20"]19[`7H!>:`2
+M*^V0 at 7X21/V0``X2'[V0`:[PHW3_\)`!R^!D@/#0T)*O(M,0KP'#P-"0 at 8ON
+M\*/O\.2C\*/PD(&+X/ZCX/6"CH/@8"W#D(&.X)3HD(&-X)0#0`N0`<#@1(#P
+M?P"`%9"!C>1U\`$21*E_"GX`$C*J@,5_`=#0DJ\BD(%%[_"C[?"C$B#:````
+M`.20 at 5/P?R1^"!(M7)"!2Q(@SI"!1>#[<`B0 at 4L21-F`%NMU\`BD)&+U at N0T
+MA_6#X/ZCX/\2+5R0 at 4\2(,Z0 at 4;@_^3\_?YX%Q(@NZ@$J06J!JL'D(%/$D39
+M[51__>Q4@/P21,SL1(#\D(%/$B#.D(%+$D39[%1__)"%NQ(@SG\D?@@2+J*0
+M at 47@=?`(I"1B]8+D-(?U@^#^H^#_P`;`!Y"!3Q)$V9"%NQ(@SM`'T`82+J*0
+M at 4L21-GL1(#\D(6[$B#.?R1^"!(NHI"!1>!P!'\@@`F0 at 47@M`$6?RA^"!(M
+M7'@($B"H[U0!_^20 at 5/O\)"!4^"0 at 45@#N!U\`BD)&;U at N0TAX`,X'7P"*0D
+M9/6"Y#2']8/@_J/@_Q(M7.U4#_WD_)"!1Q(@SI"!1P)$V=,0KP'#P-`Q3M#0
+MDJ\BD($E$D4&$A^DD($I\)```1(?O9"!*/"0``(2'[V0 at 3OPD``#$A^]D($\
+M\)"!)1)$_>DD!/GD.HL3]12)%746!'L!>H%Y/1(K[9"!)1)$_>DD"/GD.HL3
+M]12)%746!'L!>H%Y01(K[9"!*>`D^&!Y)/Q@=20(8`*!W)"!*."T`042*<6!
+MWY"!*."T`@42$;V!WY"!*."T`P42!NN!WY"!*."T$!F0 at 3S@_I"!.^#][?^0
+M at 2KN\*/O\!(RJH'?D($HX+01&9"!/.#^D($[X/WM_Y"!*N[PH^_P$C(&@=^0
+M at 2C@]&`"@=__(I"!*>"T#`B0 at 3IT`?"`!>20 at 3KPD($HX&0'8`*!KY"!.^"0
+M at 3CPD($\X)"!.?"0 at 3[@_^3\_?YX"!(@NZ@$J06J!JL'D($]X/_D_/W^$D3,
+MP`3`!<`&P`>0 at 3_@_^3\_?YX$!(@N]`#T`+0`=``$D3,D($L$B#.D($YX/^0
+M at 3C@_5&-D($P$B#.D($ZX'`"@9>0 at 4+@_^3\_?YX"!(@NZ@$J06J!JL'D(%!
+MX/_D_/W^$D3,P`3`!<`&P`>0 at 4/@_^3\_?YX$!(@N]`#T`+0`=``$D3,D($T
+M$B#.D($T$D39$B";D($P$D3E$D2_P`3`!<`&P`>0 at 2P21-F0@3021.421+_0
+M`]`"T`'0`!)$S)"!+!(@SI"!+!)$V9"!1Q(@SI"!..#]H^#_D>*`,)"!.^#_
+MH^#]D($ZX)"!2/![`7J!>3VC$D4&>H%Y09"!3!)%!I"!*.#[\9.``W\"(G\!
+M(M,0KP'#P-#`!\`%D(%'$D39D(%-$B#.T`70![$$T-"2KR*0 at 4OO\*L%D(%1
+M$B#:`````*\#Y/S]_G at 4$B"[J`2I!:H&JP>0 at 4T21-GM5`_]Y/P21,SL5`_\
+MD(%1$B#.D(%+X'7P"*0D8/6"Y#2']8/@_J/@_\`&P`>0 at 5$21-F0A;L2(,[0
+M!]`&`BZBD`()X)"!$_"C="#PD($3X/\PX`6CX"2`\._#$Y#]$/#DD($D\)"!
+M%.`D`/6"Y#3\]8/@D($6\)"!).!D`?`D;I`!Q/!T7:/PD($6X/]D!&`*[V0(
+M8`7O9`QP>N20 at 17PD($6X/^0 at 17@_L.?4#_ at _Y"!%.#]+R0`]8+D-/SU@^#\
+M=!<O]8+D-('U@^SP[O_M+__D,_[O]$YP"Y#]$.`$\.20 at 13PD($5X`3P at +-[
+M`7J!>1=1FY"!(^_PPY0"4!:0 at 2/@8`V0 at 17@_Y"!%.`O\*&3?P$B?P`B$BVG
+MY/52$C*>[V!R8U(!Y5(D1I`!Q/!T7J/PD`"(X/50]5%4#V#?Y5`PX`L at Y`,2
+M*<534>Z`/N50,.$6(.4.$A&][W`#0U$@D`$&Y/!34?V`(^50,.(+(.8#$@;K
+M4U'[@!/E4##C#B#G"+%N[W`#0U&`4U'WK5%_B!(R'H"((I"!@>_PH^WPK0.L
+M`N20 at 8GPH_"0`<1TQ?!T7J/P[%0__)`!0.WPK at 3NH_"0 at 8'@)(%@-"3:8!PD
+M/'!!D(&"X,0S,S-4@)"!AO"C=&GPHW2`\(`LD(&"X%0!D(&&\*-TI?"C=`'P
+M@!B0 at 8+@Q%00D(&&\*-T?_"C=!#P@`-_`"*0 at 8?@D`$&\)"!AN!@#I`!0O"0
+M at 87@D`%#\(`-D`%#Y/"0 at 8;@D`%"\)"!B.#_D`%"X%__D(&&X&]@[G3%!)`!
+MQ/!T7J/PD`%#Y/!_`2(BD(%%[_"C[?"CZ_"0 at 4D21/V+$XH4B15U%@1[`7J!
+M>6(2*^V0 at 4P21/V+$XH4B15U%@1[`7J!>682*^V0 at 4;@_I"!1>#][?^0 at 4_N
+M\*/O\)"!1^#_M`0(D(%2=`'P@`_OD(%2M`4%=`+P@`-T!/#3D(%0X)3_D(%/
+MX)0`0`(!DN20 at 5'PD(%2X/^0 at 5'@_L.?0`)!]'1B+O6"Y#2!]8/@D(%3\.[_
+MD(%0X"__D(%/X#0`CX+U@^"0 at 53PD(%(X&`ED(%1X"1F]8+D-('U@^"0 at 5WP
+MX/_T_I"!5.!>_I"!4^#][UU.\)"!3Z/@_Z/@+_^0 at 5/@_1(R'I"!4>`$\("%
+MTY"!4."4_Y"!3^"4!U!XY)"!4?"0 at 5+@_Y"!4>#^PY]``D'T=&(N]8+D-('U
+M@^"0 at 5/P[O^0 at 5#@+_N0 at 4_@-`#ZBX+U@^"0 at 53PD(%(X&`ED(%1X"1F]8+D
+M-('U@^"0 at 5WPX/_T_I"!5.!>_I"!4^#][UU.\)"!4^"+ at HJ#\)"!4>`$\("-
+MY)"!4_"0 at 5X2(-H`````D(%5$B#:`````)"!2.!@$9"!3^#^H^#_$BU<D(%9
+M$B#.Y)"!4?"0 at 5+@_Y"!4>#^PY]``D$?=&(N]8+D-('U@^"0 at 5/PD(%(X&!W
+MD(%1X/LD9O6"Y#2!]8/@D(%=\)"!61)$V>MU\`BD^?@2(*B0 at 5W@_O1?_Y"!
+M4^#][EU/\)"!7A)$Y<``P`'``L`#D(%=X/]^`)"!4>!U\`BD_>^H!0B`!<,S
+MSC/.V/G_[C.5X/W\T`/0`M`!T``21,R0 at 5X2(,Z0 at 5421.7``,`!D(%3X/_D
+M_/W^D(%1X'7P"*3Y^!(@N]`!T``21,R0 at 542(,Z0 at 5'@!/`A3I"!2.!@.I"!
+M7A)$V1(@FY"!61)$Y1)$O\`$P`7`!L`'D(%5$D39D(%>$D3E$D2_T`/0`M`!
+MT``21,R0 at 542(,Z0 at 5421-F0A;L2(,Z0 at 4_@_J/@_Q(NHI"!1^"0`:#PD(%2
+MX)`!H?"0 at 4C@D`&B\)"!21)$_1(?I)`!I/"0``$2'[V0`:7PD``"$A^]D`&F
+M\)```Q(?O9`!I_"0 at 5421-F0`:CO\)"!51)$V7@($B"HD`&I[_"0 at 5421-EX
+M$!(@J)`!JN_PD(%5$D39>!@2(*B0`:OO\"*/#2*/#B)_`I"!`.#^[\.>4!CO
+M)>`D@?CF,.0+D`&X=`CPH_!_`"(/@-Y_`2*0`33 at 53WU0:/@53[U0J/@53_U
+M0Z/@54#U1)`!-.5!\*/E0O"CY4/PH^5$\"*0`3S at 547U2:/@54;U2J/@54?U
+M2Z/@54CU3)`!/.5)\*/E2O"CY4OPH^5,\%.1WR*0@*/@9`%P&9"`Y^!@$Y`!
+M5^3PD`$\=`(23NN0`5=T!?`BD(#GX&`UD`:2X##@).3U'9"`^N##$U1_]1[D
+M^_U_6'X!$D[\D`%;=`7PD`:2=`'P(I"`Y.!4]_`21Z8BD(#GX&`UD`:2X##A
+M).3U'9"`^N##$U1_]1[D^_U_7'X!$D[\D`%?=`7PD`:2=`+P(I"`Y.!4[_`2
+M1Z8BD7&0 at 0SO\)"`Y##@!N!$`?"`!.!4_O"0 at 0S@,.81D`$OX##G!.3P@`:0
+M`2]T@/"0 at .3@,.`:D(#RY/"C=`?PD(#RH^"0!5CPD`3LX%3=\"*0!.S at 1"+P
+M(N20 at 0WPH_"C\)``@^"0 at 0WPD`"#X/Z0 at 0W@_[4&`2+#D($/X)1DD($.X)0`
+M0`V0`<#@1$#PD($-X/\BD($.Y'7P`1)$J8#"D($)X&`/Y/"0!5/@1`'PD`7]
+MX`3P(I"`Y.#_Q!,35`,PX"?O5+_PD`3 at X)"`Y3#@!N!$`?"`$.!4_O"0`;ET
+M`?"0`;AT!/`21Z;D_Y"!!.`PX$B0 at 0C@_6!!=`%^`*@'"(`%PS/.,\[8^?^0
+M!.#@^^];8`;DD($(\"*0 at 0;@TYU0$)`!QW00\+%4D($$X%3^\"(22.20 at 0C@
+M!/`BD(`!X&0"8`>0!I#@1`'P(I"`Y.#_Q!,3$U0!,.`L[U1_\)`$X."0 at .4P
+MX0;@1`+P@`_ at 5/WPD`&Y=`'PD`&X!/"0 at .?@8`,21Z9_`:$$TQ"O`</`T)`$
+M'>!@&I`%(N!4D&`'D`'`X$0(\)`!QN`PX>1_`(`"?P'0T)*O(L/NE`%`"@WM
+M$Y#]$/#D+_\BP^Z4`4`DD/T1X&UP&I`!%^"U!0V0`>1T=_"0_1'D\(`&[020
+M_1'PY"__(M,0KP'#P-"0`0'@1`+PD`$`=/_PD`:W=`GPD`:T=(;P?WQ^"!(M
+M7.Q4?_R0 at 8\2(,Z0 at 8\21-F0A;L2(,Y_?'X($BZBD(6[$B#:S,``P'^,?@@2
+M+J*0A;L2(-H`P``4?W!^#A(NHI"%EA(@V@`#/F#D_?\2,4W0T)*O(M$,D(#J
+M=`SP(A)/\9"%NQ(@VLSP`,!_C'X($BZBD(6[$B#:````%']P?@X2+J*0A982
+M(-H`````Y/W_$C%-?WQ^"!(M7.Q$@/R0 at 9,2(,Z0 at 9,21-F0A;L2(,Y_?'X(
+M$BZBD`$`=#_PH^!4_?"0!5/@1"#P(I``D.`@X/DBD(#QX/U_DQ(R'I"`Z.!@
+M$I`!+^`PYP5T$/"`!I`!+W20\)``".!$$/U_"!(R'G\!$E?1D`"0X$0!_7^0
+M$C(>?Q1^``(RJN\4D`5S\)`!/W00\/U_`W1%+_CF3?[V=#@O]8+D-`'U@^[P
+M(G1%+_CF_NWT7O[V=#@O]8+D-`'U@^[P(M,0KP'#P-"0@:#M\)"!G^_PTY0'
+M4'#@_W0!J`<(@`+#,]C\]/^0`$?@7_U_1Q(R'I"!G^#_=`&H!PB``L,SV/S_
+MD`!&X$_]?T82,AZ0@:#@8!B0 at 9_@_W0!J`<(@`+#,]C\_Y``1>!/@!>0 at 9_@
+M_W0!J`<(@`+#,]C\]/^0`$7 at 7_U_18!^D(&?X"3X\.`D!/]T`:@'"(`"PS/8
+M_/3_D`!#X%_]?T,2,AZ0 at 9_@_W0!J`<(@`+#,]C\_Y``0^!/_7]#$C(>D(&@
+MX&`=D(&?X"0$_W0!J`<(@`+#,]C\_Y``0N!/_7]"@!R0 at 9_@)`3_=`&H!PB`
+M`L,SV/ST_Y``0N!?_7]"$C(>T-"2KR*0 at .3@5/OPY)"`\/"0 at .OP(N\D_F`,
+M!'`HD(#M=`'PH_`B[7`*D(#[X)"`[?"`!9"`[>WPD(#MX*/PD(#EX$0(\"(2
+M3VKO9`%@")`!N'0!\(!GD(#KX/]4`V`(D`&X=`+P@%:0 at .G@_N3#GE`(D`&X
+M=`3P@$3O,.((D`&X=`CP@#B0 at .O@,.0(D`&X=!#P@"F0 at .7@$Q-4/R#@")`!
+MN'0@\(`6D(#_X&`(D`&X=(#P@`B0`;CD\'\!(I`!N70$\'\`(I`"A^!@")`!
+MN'0!\(`7D`*&X"#A")`!N'0$\(`(D`&XY/!_`2*0`;ET"/!_`"+O8#Z0@*/@
+M9`%P-I"`Y>!4_O"0!2)T#_"0!@3 at 5+_PY/\22.:_`0Z0 at .3@1$#PD(#J=`;P
+M(I`!N70!\)`!N'0(\"*0!2)T;_"0!2?@5+_PD(#J=`+P(N20 at 0OPD`:IX)"!
+M"_#@5,!P#9"`Z^!4_O!4_?`"1Z:0 at 0O@,.8BD(#GX&0!<"&0 at .O@1`'PD(#F
+MX%0/9`)@!%%*@`P23CV`!Y"`Z^!4_O"0 at 0O@D(#K,.<4X$0"$D[KD`%7=`7P
+MD(#DX$0$\"+ at 5/WP(I`$'>!P%)"``^#_Y/T22?F.3H]/D`0?="#P(I"`H^!D
+M`6`"0?J0 at .?@<`)!^I"`YN#$5`]D`7`BD`:KX)"`[O"0!JK at D(#M\*/@_W`(
+MD(#MX/[_@`"0 at .[O\)"`Y>!$!/#DD(#P\)"`\J/@D`58\)`!5^3PD`$\=`+P
+MD(#KX%3]\%3O\)"`YN#_Q%0/)/U0`H`",=B0 at .7@$Q,35!\PX!"0 at .W@_Z/@
+MM0<&$F=*$DV?(I"`Y.#_$Q-4/S#@$>]4^_"0 at .O@5/WP5`=P0H`]D(#PX`3P
+MD(#KX%3O\)"`\.#_M`$"@`3OM`(&D`58X`3PD(#XX/^0@/#@TY]`#Y"`H^"T
+M`0N0 at .7@5/OP(A)'IB+D_N_#$_WO,.`$[B2`_I#]$.WPKP8BJP>J!NTK^^0Z
+M^L.0@*#@FY"`G^":4!.CX"0!_Y"`G^`T`/[#ZY_[ZI[ZZI#]$?"O`W0`+_6"
++Y#3[]8/@_R(`,@@`
+`
+end

Modified: head/sys/dev/rtwn/pci/rtwn_pci_attach.h
==============================================================================
--- head/sys/dev/rtwn/pci/rtwn_pci_attach.h	Wed Jan  2 06:03:19 2019	(r342681)
+++ head/sys/dev/rtwn/pci/rtwn_pci_attach.h	Wed Jan  2 06:48:53 2019	(r342682)
@@ -17,9 +17,11 @@
  */
 
 void	r92ce_attach(struct rtwn_pci_softc *);
+void	r88ee_attach(struct rtwn_pci_softc *);
 
 enum {
 	RTWN_CHIP_RTL8192CE,
+	RTWN_CHIP_RTL8188EE,
 	RTWN_CHIP_MAX_PCI
 };
 
@@ -32,13 +34,15 @@ struct rtwn_pci_ident {
 
 static const struct rtwn_pci_ident rtwn_pci_ident_table[] = {
 	{ 0x10ec, 0x8176, "Realtek RTL8188CE", RTWN_CHIP_RTL8192CE },
+	{ 0x10ec, 0x8179, "Realtek RTL8188EE", RTWN_CHIP_RTL8188EE },
 	{ 0, 0, NULL, RTWN_CHIP_MAX_PCI }
 };
 
 typedef void	(*chip_pci_attach)(struct rtwn_pci_softc *);
 
 static const chip_pci_attach rtwn_chip_pci_attach[RTWN_CHIP_MAX_PCI] = {
-	[RTWN_CHIP_RTL8192CE] = r92ce_attach
+	[RTWN_CHIP_RTL8192CE] = r92ce_attach,
+	[RTWN_CHIP_RTL8188EE] = r88ee_attach
 };
 
 static __inline void

Added: head/sys/dev/rtwn/rtl8188e/pci/r88ee.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/dev/rtwn/rtl8188e/pci/r88ee.h	Wed Jan  2 06:48:53 2019	(r342682)
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2018 Farhan Khan <khanzf at gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef RTL8188EE_H
+#define RTL8188EE_H
+
+#include <dev/rtwn/rtl8188e/r88e.h>
+
+
+/*
+ * Global definitions.
+ */
+#define R88EE_PUBQ_NPAGES	115
+#define R88EE_HPQ_NPAGES	41
+#define R88EE_NPQ_NPAGES	1
+#define R88EE_LPQ_NPAGES	13
+#define R88EE_TX_PAGE_COUNT	\
+	(R88EE_PUBQ_NPAGES + R88EE_HPQ_NPAGES + \
+	 R88EE_NPQ_NPAGES + R88EE_LPQ_NPAGES)
+
+
+/*
+ * Function declarations.
+ */
+/* r88ee_init.c */
+void	r88ee_init_bb(struct rtwn_softc *);
+void	r88ee_init_intr(struct rtwn_softc *);
+int	r88ee_power_on(struct rtwn_softc *);
+void	r88ee_power_off(struct rtwn_softc *);
+
+/* r88ee_rx.c */
+int	r88ee_get_intr_status(struct rtwn_pci_softc *, int *);
+void	r88ee_enable_intr(struct rtwn_pci_softc *);
+void	r88ee_start_xfers(struct rtwn_softc *);
+void	r88ee_post_init(struct rtwn_softc *);
+
+#endif	/* RTL8188EE_H */
+

Added: head/sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c	Wed Jan  2 06:48:53 2019	(r342682)
@@ -0,0 +1,242 @@
+/*-
+ * Copyright (c) 2018 Farhan Khan <khanzf at gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/linker.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnreg.h>
+#include <dev/rtwn/if_rtwnvar.h>
+#include <dev/rtwn/if_rtwn_nop.h>
+
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+
+#include <dev/rtwn/rtl8192c/r92c_var.h>
+
+#include <dev/rtwn/rtl8188e/r88e_priv.h>
+#include <dev/rtwn/rtl8188e/r88e_rom_image.h>	/* for 'macaddr' field */
+
+#include <dev/rtwn/rtl8192c/pci/r92ce.h>
+#include <dev/rtwn/rtl8192c/pci/r92ce_tx_desc.h>
+
+#include <dev/rtwn/rtl8188e/pci/r88ee.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_reg.h>
+
+static struct rtwn_r88e_txpwr r88ee_txpwr;
+
+void	r88ee_attach(struct rtwn_pci_softc *);
+
+static void
+r88ee_set_macaddr(struct rtwn_softc *sc, uint8_t *buf)
+{
+	struct r88e_rom *rom = (struct r88e_rom *)buf;
+
+	IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, rom->diff_d0.pci.macaddr);
+}
+
+static void
+r88ee_postattach(struct rtwn_softc *sc)
+{
+	struct r92c_softc *rs = sc->sc_priv;
+	struct ieee80211com *ic = &sc->sc_ic;
+
+	rs->rs_scan_start = ic->ic_scan_start;
+	ic->ic_scan_start = r92c_scan_start;
+	rs->rs_scan_end = ic->ic_scan_end;
+	ic->ic_scan_end = r92c_scan_end;
+}
+
+static void
+r88ee_attach_private(struct rtwn_softc *sc)
+{
+	struct r92c_softc *rs;
+
+	rs = malloc(sizeof(struct r92c_softc), M_RTWN_PRIV, M_WAITOK | M_ZERO);
+
+	rs->rs_txpwr			= &r88ee_txpwr;
+
+	rs->rs_set_bw20			= r88e_set_bw20;
+	rs->rs_get_txpower		= r88e_get_txpower;
+	rs->rs_set_gain			= r88e_set_gain;
+	rs->rs_tx_enable_ampdu		= r88e_tx_enable_ampdu;
+	rs->rs_tx_setup_hwseq		= r88e_tx_setup_hwseq;
+	rs->rs_tx_setup_macid		= r88e_tx_setup_macid;
+	rs->rs_set_rom_opts		= r88ee_set_macaddr;
+
+	rs->rf_read_delay[0]		= 1000;
+	rs->rf_read_delay[1]		= 1000;
+	rs->rf_read_delay[2]		= 1000;
+
+	sc->sc_priv = rs;
+
+}
+
+static void
+r88ee_adj_devcaps(struct rtwn_softc *sc)
+{
+	/* XXX TODO */
+}
+
+void
+r88ee_attach(struct rtwn_pci_softc *pc)
+{
+	struct rtwn_softc *sc		= &pc->pc_sc;
+
+	/* PCIe part. */
+	pc->pc_setup_tx_desc		= r92ce_setup_tx_desc;
+	pc->pc_tx_postsetup		= r92ce_tx_postsetup;
+	pc->pc_copy_tx_desc		= r92ce_copy_tx_desc;
+	pc->pc_enable_intr		= r88ee_enable_intr;
+	pc->pc_get_intr_status		= r88ee_get_intr_status;
+
+	pc->pc_qmap			= 0xe771;
+	pc->tcr				= 0x8200;
+
+	/* Common part. */
+	sc->sc_flags			= RTWN_FLAG_EXT_HDR;
+
+	sc->sc_start_xfers		= r88ee_start_xfers;
+	sc->sc_set_chan			= r92c_set_chan;
+	sc->sc_fill_tx_desc		= r92c_fill_tx_desc;
+	sc->sc_fill_tx_desc_raw		= r92c_fill_tx_desc_raw;
+	sc->sc_fill_tx_desc_null	= r92c_fill_tx_desc_null; /* XXX recheck */
+	sc->sc_dump_tx_desc		= r92ce_dump_tx_desc;
+	sc->sc_tx_radiotap_flags	= r92c_tx_radiotap_flags;
+	sc->sc_rx_radiotap_flags	= r92c_rx_radiotap_flags;
+	sc->sc_get_rx_stats		= r88e_get_rx_stats;
+	sc->sc_get_rssi_cck		= r88e_get_rssi_cck;
+	sc->sc_get_rssi_ofdm		= r88e_get_rssi_ofdm;
+	sc->sc_classify_intr		= r88e_classify_intr;
+	sc->sc_handle_tx_report		= r88e_ratectl_tx_complete;
+	sc->sc_handle_c2h_report	= r88e_handle_c2h_report;
+	sc->sc_check_frame		= rtwn_nop_int_softc_mbuf;
+	sc->sc_rf_read			= r92c_rf_read;
+	sc->sc_rf_write			= r88e_rf_write;
+	sc->sc_check_condition		= r92c_check_condition;
+	sc->sc_efuse_postread		= rtwn_nop_softc;
+	sc->sc_parse_rom		= r88e_parse_rom;
+	sc->sc_set_led			= r88e_set_led;
+	sc->sc_power_on			= r88ee_power_on;
+	sc->sc_power_off		= r88ee_power_off;
+#ifndef RTWN_WITHOUT_UCODE
+	sc->sc_fw_reset			= r88e_fw_reset;
+	sc->sc_fw_download_enable	= r88e_fw_download_enable;
+#endif
+	sc->sc_llt_init			= r92c_llt_init;
+	sc->sc_set_page_size		= r92c_set_page_size;
+	sc->sc_lc_calib			= r92c_lc_calib;
+	sc->sc_iq_calib			= r88e_iq_calib;
+	sc->sc_read_chipid_vendor	= rtwn_nop_softc_uint32;
+	sc->sc_adj_devcaps		= r88ee_adj_devcaps;
+	sc->sc_vap_preattach		= rtwn_nop_softc_vap;
+	sc->sc_postattach		= r88ee_postattach;
+	sc->sc_detach_private		= r92c_detach_private;
+	sc->sc_set_media_status		= r88e_set_media_status;
+#ifndef RTWN_WITHOUT_UCODE
+	sc->sc_set_rsvd_page		= r88e_set_rsvd_page;
+	sc->sc_set_pwrmode		= r88e_set_pwrmode;
+	sc->sc_set_rssi			= r92c_set_rssi;
+#endif
+	sc->sc_beacon_init		= r92c_beacon_init;
+	sc->sc_beacon_enable		= r88e_beacon_enable;
+	sc->sc_beacon_set_rate		= rtwn_nop_void_int;
+	sc->sc_beacon_select		= rtwn_nop_softc_int;
+	sc->sc_temp_measure		= r88e_temp_measure;
+	sc->sc_temp_read		= r88e_temp_read;
+	sc->sc_init_tx_agg		= rtwn_nop_softc;
+	sc->sc_init_rx_agg		= rtwn_nop_softc;
+	sc->sc_init_ampdu		= r92ce_init_ampdu;
+	sc->sc_init_intr		= r88ee_init_intr;
+	sc->sc_init_edca		= r92ce_init_edca;
+	sc->sc_init_bb			= r88ee_init_bb;
+	sc->sc_init_rf			= r92c_init_rf;
+	sc->sc_init_antsel		= rtwn_nop_softc;
+	sc->sc_post_init		= r88ee_post_init;
+	sc->sc_init_bcnq1_boundary	= rtwn_nop_int_softc;
+
+	sc->mac_prog			= &rtl8188e_mac[0];
+	sc->mac_size			= nitems(rtl8188e_mac);
+	sc->bb_prog			= &rtl8188e_bb[0];
+	sc->bb_size			= nitems(rtl8188e_bb);
+	sc->agc_prog			= &rtl8188e_agc[0];
+	sc->agc_size			= nitems(rtl8188e_agc);
+	sc->rf_prog			= &rtl8188e_rf[0];
+
+	sc->name			= "RTL8188EE";
+	sc->fwname			= "rtwn-rtl8188eefw";
+	sc->fwsig			= 0x88e;
+
+	sc->page_count			= R88EE_TX_PAGE_COUNT;
+	sc->pktbuf_count		= R88E_TXPKTBUF_COUNT;
+
+	sc->ackto			= 0x40;
+	sc->npubqpages			= R88EE_PUBQ_NPAGES;
+	sc->nhqpages			= R88EE_HPQ_NPAGES;
+	sc->nnqpages			= R88EE_NPQ_NPAGES;
+	sc->nlqpages			= R88EE_LPQ_NPAGES;
+	sc->page_size			= R92C_TX_PAGE_SIZE;
+
+	sc->txdesc_len			= sizeof(struct r92ce_tx_desc);
+	sc->efuse_maxlen		= R88E_EFUSE_MAX_LEN;
+	sc->efuse_maplen		= R88E_EFUSE_MAP_LEN;
+	sc->rx_dma_size			= R88E_RX_DMA_BUFFER_SIZE;
+
+	sc->macid_limit			= R88E_MACID_MAX + 1;
+	sc->cam_entry_limit		= R92C_CAM_ENTRY_COUNT;
+	sc->fwsize_limit		= R92C_MAX_FW_SIZE;
+	sc->temp_delta			= R88E_CALIB_THRESHOLD;
+
+	sc->bcn_status_reg[0]		= R92C_TDECTRL;
+	/*
+	 * TODO: some additional setup is required
+	 * to maintain few beacons at the same time.
+	 *
+	 * XXX BCNQ1 mechanism is not needed here; move it to the USB module.
+	 */
+	sc->bcn_status_reg[1]		= R92C_TDECTRL;
+	sc->rcr				= 0;
+
+	sc->ntxchains			= 1;
+	sc->nrxchains			= 1;
+
+	r88ee_attach_private(sc);
+}

Added: head/sys/dev/rtwn/rtl8188e/pci/r88ee_init.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/dev/rtwn/rtl8188e/pci/r88ee_init.c	Wed Jan  2 06:48:53 2019	(r342682)
@@ -0,0 +1,276 @@
+/*-
+ * Copyright (c) 2017 Farhan Khan <khanzf at gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/taskqueue.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/linker.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <net/if.h>
+#include <net/ethernet.h>
+#include <net/if_media.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_radiotap.h>
+
+#include <dev/rtwn/if_rtwnvar.h>
+
+#include <dev/rtwn/pci/rtwn_pci_var.h>
+
+#include <dev/rtwn/rtl8192c/r92c.h>
+
+#include <dev/rtwn/rtl8188e/pci/r88ee.h>
+#include <dev/rtwn/rtl8188e/pci/r88ee_reg.h>
+
+void
+r88ee_init_bb(struct rtwn_softc *sc)
+{
+
+	/* Enable BB and RF. */
+	rtwn_setbits_2(sc, R92C_SYS_FUNC_EN, 0,
+	    R92C_SYS_FUNC_EN_BBRSTB | R92C_SYS_FUNC_EN_BB_GLB_RST |
+	    R92C_SYS_FUNC_EN_DIO_RF);
+
+	rtwn_write_1(sc, R92C_RF_CTRL,
+	    R92C_RF_CTRL_EN | R92C_RF_CTRL_RSTB | R92C_RF_CTRL_SDMRSTB);
+	rtwn_write_1(sc, R92C_SYS_FUNC_EN, R92C_SYS_FUNC_EN_PPLL |
+	    R92C_SYS_FUNC_EN_PCIEA | R92C_SYS_FUNC_EN_DIO_PCIE |
+	    R92C_SYS_FUNC_EN_BB_GLB_RST | R92C_SYS_FUNC_EN_BBRSTB);
+
+	r88e_init_bb_common(sc);
+}
+
+void
+r88ee_init_intr(struct rtwn_softc *sc)
+{
+	/* Disable interrupts. */
+	rtwn_write_4(sc, R88E_HIMR, 0x00000000);
+	rtwn_write_4(sc, R88E_HIMRE, 0x00000000);
+}
+
+int
+r88ee_power_on(struct rtwn_softc *sc)
+{
+	int ntries;
+
+	/* Wait for power ready bit. */
+	for (ntries = 0; ntries < 5000; ntries++) {
+		if (rtwn_read_4(sc, R92C_APS_FSMCO) & R92C_APS_FSMCO_SUS_HOST)
+			break;
+		rtwn_delay(sc, 10);
+	}
+	if (ntries == 5000) {
+		device_printf(sc->sc_dev,
+		    "timeout waiting for chip power up\n");
+		return (ETIMEDOUT);
+	}
+
+	/* Unlock ISO/CLK/Power control register. */
+	rtwn_write_1(sc, R92C_RSV_CTRL, 0);
+
+	/* Reset BB. */
+	rtwn_setbits_1(sc, R92C_SYS_FUNC_EN,
+	    R92C_SYS_FUNC_EN_BBRSTB | R92C_SYS_FUNC_EN_BB_GLB_RST, 0);
+
+	/* schmit trigger */
+	rtwn_setbits_1(sc, R92C_AFE_XTAL_CTRL + 2, 0, 0x80);
+
+	/* Disable HWPDN. */
+	rtwn_setbits_1_shift(sc, R92C_APS_FSMCO,
+	    R92C_APS_FSMCO_APDM_HPDN, 0, 1);
+
+	/* Disable WL suspend. */
+	rtwn_setbits_1_shift(sc, R92C_APS_FSMCO,
+	    R92C_APS_FSMCO_AFSM_HSUS | R92C_APS_FSMCO_AFSM_PCIE, 0, 1);
+
+	rtwn_setbits_1_shift(sc, R92C_APS_FSMCO,
+	    0, R92C_APS_FSMCO_APFM_ONMAC, 1);
+	for (ntries = 0; ntries < 5000; ntries++) {
+		if (!(rtwn_read_2(sc, R92C_APS_FSMCO) &
+		    R92C_APS_FSMCO_APFM_ONMAC))
+			break;
+		rtwn_delay(sc, 10);
+	}
+	if (ntries == 5000)
+		return (ETIMEDOUT);
+
+	rtwn_setbits_1(sc, R92C_PCIE_CTRL_REG + 2, 0, 0x04);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-head mailing list