Bug 1240799 - Apply axis height for mfrac elements without bar. r=fredw
authorJames Kitchener <jkitch.bug@gmail.com>
Sat, 20 Feb 2016 02:59:00 +0100
changeset 285585 3668019351bb2d8f819004b092ad62542b72cd57
parent 285584 41cb765011b63019f8d9aa92b7db24bab1eb646e
child 285586 069f272ec9f1b1a88516577dfcf5dfb186bf132c
push id17831
push userkwierso@gmail.com
push dateThu, 25 Feb 2016 22:42:17 +0000
treeherderfx-team@8e34b12969bf [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersfredw
bugs1240799
milestone47.0a1
Bug 1240799 - Apply axis height for mfrac elements without bar. r=fredw
layout/mathml/imptests/LICENSE
layout/mathml/imptests/fonts/fraction-axisheight7000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-denominatordisplaystylegapmin5000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-denominatordisplaystyleshiftdown6000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-denominatorgapmin4000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-denominatorshiftdown3000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-numeratordisplaystylegapmin8000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-numeratordisplaystyleshiftup2000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-numeratorgapmin9000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-numeratorshiftup11000-rulethickness1000.woff
layout/mathml/imptests/fonts/fraction-rulethickness10000.woff
layout/mathml/imptests/fonts/stack-axisheight7000.woff
layout/mathml/imptests/fonts/stack-bottomdisplaystyleshiftdown5000.woff
layout/mathml/imptests/fonts/stack-bottomshiftdown6000.woff
layout/mathml/imptests/fonts/stack-displaystylegapmin4000.woff
layout/mathml/imptests/fonts/stack-gapmin8000.woff
layout/mathml/imptests/fonts/stack-topdisplaystyleshiftup3000.woff
layout/mathml/imptests/fonts/stack-topshiftup9000.woff
layout/mathml/imptests/mochitest.ini
layout/mathml/imptests/test_fraction-parameters.html
layout/mathml/imptests/test_stack-parameters.html
layout/mathml/moz.build
layout/mathml/nsMathMLmfracFrame.cpp
new file mode 100644
--- /dev/null
+++ b/layout/mathml/imptests/LICENSE
@@ -0,0 +1,32 @@
+Tests in this directory have been imported from
+https://github.com/MathML/MathMLinHTML5-tests
+
+
+Copyright (c) 2016 MathML Association
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
new file mode 100644
index 0000000000000000000000000000000000000000..0f2ae3bc1261a3930b8e23a1efe8e0b547fe8c70
GIT binary patch
literal 1208
zc$_QucXRU(3GruOVA;XI%>V?P4GfG7Sb?*fn*sv^a|n=mj)8$u>gT`dU2bk6zCgVy
zKru-mmMK3LTj1*$;sF$M0P^#J>LQrfv>*Bh>l=aCKruTYPT=Pf_>i2NSO7GS1;{rC
z$~iIcG9SxGO-uo@Ie=nXKy1dcbdzTWP!K3)0^~~ru?mwv>-~(}k_w<58-RR}S`PLL
z3=Fx66+rVC1Au%sFlGv1$V<#k1&Yl8;w+$grjT0&(gpd&B|v*^fNI2mSmA#ggK@>2
z<b;%j1cpatyT5*a^fPy#QGxM(hAx8`t3AoWM!c*tJU$9s46zbipBNaRYX2Pi(W=<>
zla-mpz-R%J8bg!~GsuZR>zN>G66+3HG&W9cY+Tu$$<NH}%-@n$b0Fcw2^Nvmgr_MD
zjBact7Y-}{!XK?4xt&GYq!#cnD>G=yaSDO-AD!r*b;v>F*#0B-7kpm|rYX;GN>Sr>
z4HsS6y-1q-owLN*1rnZ0FGQ<)-&J>i<GA~c%hqYX&#}DdjDtLhb;h6fecxNj{6I?o
zLqNUk8JTL156^D2e^5Hkd#75yZ#KuD$&bbI{)8XTW$BG}t2(Q_PHxSrB!2EEeYJNU
zUM^(zzqk0YnpoZOLheKLWp|$avsOE?;do~x&oz%grv=?DTe(~&1iYC1tfO*L(Y!)a
zw}TT6Pu-|>zQ;H@r~cGgD_vJ}P8XHX_%n}<=AJ*YLu1pCBTG+8Y+DrW^EOhvs8mJ#
z%=-PSB`)liQe4b`<I|E)=2vo8T-?U=G-<=B$4k8Aj=2Xf*|jQBVJXk&!(r1`dYW0s
ziga23*nR!HSa9{)OXn<gx8$bwCp8NG|DW$LH$3q~#?k+O3TCA3E}Hc;TX)es5#^7s
z-3-HcokhdeSG-h@4w@YtUCq5ZeB1o5cQ;<CJQ(8Sb#-;t{(^(?W-Ct0LE<VQA*~@n
zlFf}xU<2bPiGwv_Y^(}rnOYR~9s2)Y;M0HS6<%y^W^59|>Iy3MR~Q*06WK0<^`$X1
z|3Ay)=Fl~fk(Yr%Bb0F`*u0d4#KeS@lq+7^UOsv!&z!&PyXJ(>IghhG=QRw?4Gb>m
zYMu4eJ$b_C+&OPuJu{Xr0|O&N1EY-p57K`qp8et6_Oe~)Ge74vIk{tb3JFsaE6(X3
zKA@m*_=8tKTcdMZphrie<Pyi;gYy?2vfRI56GzIHCbvz?nkF_boY|D0<k_~qzbUz}
zu&yXg=>)6G?v@I5W=3UZVdce>ioV}_zqMNO`@6q8Q}sW`ZHyPXFaK|H!tLMHdtZFN
zH9xxU`linx|E>~zDfaf+Lnemw57Ad);giD9<Xx7(<KUNvva=IR7<^xFurt8(!h@uW
z11pXT97s4^)y~MXL|LMPS$)A4HNmXqh6V=51T*yn4E7($V`~-^QQmyfV6g`C;rpu{
zw(&BvH%m+iW4zRpAS`iEVCr(FBQ`uvJVHE07IT>cHJL&dGNpZNJlooFC_{yVp=mP@
L7X$MP1~3KyHR#Cl
new file mode 100644
index 0000000000000000000000000000000000000000..03e9b3688596fd63753844ee5baa11c5c3e9a9fd
GIT binary patch
literal 1264
zc$_QucXRU(3GruOVEMqn%>V>kR~Q%>umWc{Hw6X;<{BXLAp-+r@H?R&$!=~TzCgVR
zKru-mmMK3LTj1*$;sF!`smlSXi(q0?5%dq%Hv+MNVs=2Bz|SS{Avrg(0BD{LkZ%r@
zb7J6SK9-T1m;z*T0L8R`*o<ZACeI9@AW+N%$d?9U6()by`x&_<6+k;)0Qn%b9PAeu
z7;+OUfaWm<0QqcS%oM<omzbLh6q^CWlNlIT<(IKfpIne%TmrNgXb*!J5G(v|V=%6m
zlbn!}kihWBe)sg5M?c@LNqvx3$0(Axqom@vT8b2xg~SX85r(W_Zes=psM<e=ezYof
z{bXfkF)&)dq{a|s!whmF(0V3_n#8(;7LAQl8yi=4XYw;MJM*`s)f`ATae_r8HQ{MW
z1EU*T$%O+8fbd7_M{Z}4HmL<X%*qU!a-2dS{a1s|`aL#~m}A1)$^A&M#&J=5Na4?k
z4to`r$OTlp#w@<#tK%ed)6K+x!}D4my^QnK_kY`+ush-x^O;GZvEymY<MW?;kJ~fw
zee7b{{a)g9hwzz?`i}(tCeIgKzC+&D-R79h-rfp+_m|#Be$VJXf5PV&yUg9TRgCI4
z4!PMJQk&^A=TZ14^+$%=7Vj5)@3_QX>E3a(zrE5DB`;Pk3S8LMet^@<M<V@%Vxi*}
zr-L(R6`s6kDl=QryM2#ZUZeEouVLX^#nqp>oGGeQ3~OB<?p^qHj%Mk@t%|vaw{l(E
zcQrM_*-*;H=rWtD^SN2d?)kjNwiBQ4SKRz)NB5m#E14*_f59_kW3pD+7lg6SH!9k&
z(bY2I#I;qX{kwGcY|MVUYuSsr@1;XUWj8;soR|J>W#GPRPn}oKnSAEKW}khhZ!5_x
z;lEgvE2@|8W!tFzZN1f}yRU?%r+9zc&feOZ`S;Kbug;q$;^B{!!w(l#&ODh@QE>lT
z>D|C{L3!y>ES{2i1?7D^g0BU}KG`{kZ}z`+)_?iK4oY)^<1`^5tsy~@&5cc91LG%&
zgEeAotO{qDS`_vj`u|_x(|_j`UTkh=Y!bri3M%$j7#SiH*)D_ir7<-BKg;9h&^3{f
zmw`belyN6Gjie+bCMKk$Z1L6h^3gka=KN(}&$Fk`pFQKPb5h^yq>kPR&ow%FE6;fP
z`s*-s&61Lkcp*0R*^+4~DQfA@mx_r?Gr3Ag%#@Ij+*1F+_|Js2KZ=LHI8Xc8&f?9_
zpKLC$;go^ahtmcI948F4xK9}roG_^3HZ*89Sz)MRc&7NA{tBH_KIb(8FL+!FF)%VP
z3I5=#bMnL2zyck;bN=UiSS-7Qjt4$5Q~)OSq?C}LclUnpEz^H|Z?FCKH>vluzj;6U
zeYjpIr@DT<_}{qS#i!p#mD%l!H&wd3=&nr+!>1F)><kRhFiT-*@-EBYaq!DS+1Uvu
z48AWoU~<5G^dPC?z>4Dn2NDifwKtj+FnMJQEi98_W=@v*=w`gX;ld%=6=?<%j)q3k
zyvAKd27mT)rQ9|sFz8^+6jeCOVb&<f6IiL`aOSYW5ru;a?UyYDrYbpzY9)xt--zkZ
R=y7WT7B)Oa%)pWYgaK!++Moac
new file mode 100644
index 0000000000000000000000000000000000000000..df6aab016ae7fdde75544ae0af1256cc015303eb
GIT binary patch
literal 1280
zc$_QucXRU(3GruOU}a$7W&i?i4hBXBtiajLO@V=dxdX_2%D})FlRSfcvYT6oF9QQh
z0Z>d5h-J!;#TNKFhIjzQdVu^Kpt=YqHuazW!TLrZHc-qCh!gm^1U@9^CIa;_TLAgy
zKshG{Ugl#Nsfj5-HV05l3y95FmTvOQ015)dOn`i8AXZ`WXT6`1TT%hE;|GurQp>@9
zfq@}6u>xowV*rrP2F6SQ40(yUsX(zAKs*oVN1uW<JpBdv#U(&{L2ecUVuk;048|36
zk`q!A5*QxM>d~}*^fPy#QGxM(hAx8`t3AoWM!c*tJU$9s4B=H=KzpES{~Y?!s@V0D
zm6^rBXaSQNLzE3O$caGfnILKs>ke8pHcoA9T-lw;&&=%1-;!2yAmPLb7LnA1rzs7L
zZfqqN4lDq|AFUs`okiND7Vt1DGib_j3W4-r4Knn5VjxmGlgGoPLwSc|lhWdfE{_X6
z0+&QGmMwLR()6+s&UUid)Eh8sCsX(W_gh8z8^4xSH@>wvxUb?2s{@nZ>5rek|2}{I
zA6r4se2)$P{Wf-39OPLq*dL&BUU2yiX<JvDV>)+TY8obgDL>Laqqly-%$|OW-JFrk
zejA#5D_YEEy3KhM{z?6jVcFt(L3xKI`hxOF)Bhbc<=OUP<)V#l%>0eUAr{XqT=_bi
zGCC(|^B!kS4=>1R(~*5NYX|eXv)i^;-K{7Lo7<hK$GuUfc5_UJ_H&=5-s^cYwcmvr
zeb?1@<~@4x!Murj8d61B=VbP7?fK#|@BcI(cllXb^LU!w(?q^lZt02SZ+y(W{7~C!
ztsPS*Hc!=Eeb6Ip^|?E**L^v5?N;vXP38OYr)GaSb^X~!?N2u6-#D+XS-jeJ`JBl;
z4~p;ZyZ*!`W-b5X)WlGY=Pi?%roV}gZrRJ;$-PPS_ig9HcS`E=-b8i2R1u&4sQKuk
zradQ8%=R38|NleY%8Zpe%JrL8@tEGdubDTs^p3-mopX4W|NrLxkDqa><~>OKCM2Xa
zBuKKku?cKo{3LO(MvRSB;Ve^&!oEZQ{|kKj@4Ui`&CQHWLReiv#r_H-Lu4Y`Ww5?9
zhUWigdE6YjCNlCeFldA_?gX2cl8~5~kdjj3q3z|Pck;~n%f6mxPoF<~##`s4zSl_|
zy%U~mbo5r9@zgzc!bjWlr2cthV*`T=x>{#Fbx)q~Id{%mSI>;4%fP_M(7-6;|AX`&
zif4Z~x4mrF`OMEbO-}Auo<hRZ#4AsxCng9?NW3CACGo+8L>|GU1h&k8WRKK{M|0u>
zBB#up7r1D_#5F5{2|Q!jgV_<29==}uAR=bY{5dl@io{#rExuCiaNxv&BPUiYxwH3s
z_1m~(d#mg7Zl2x~{$~1-@9qCpZhZR}r~hm3x98LDZ+%l!vp>sam+S7z9SjGo%Iz6o
z;g-VC<Xx7(<KUNvva=IR7<^xFurt8()q|vp11pXT97s4^)!t}Qz~q%Jw6IKynK@ae
zPW2HhhuLTDH)#eEj)q3kyvAKd27mT)rQ9|sFz8^+6jeCOVb&<f6IiL`aOSYW5ru;a
j?UyqJrYbpzY9)xt--zkZ=y7Xeh^gk0V}1cF0e~0)P}lDc
new file mode 100644
index 0000000000000000000000000000000000000000..c5ba7a6a78edfa3d4e2a240c87c4092b843379ae
GIT binary patch
literal 1232
zc$_QucXRU(3GruOV7b7+%>V?Pe;61UumWc{Hw6X;<`f|FDgy(f{_@YVEpBchzCgV;
zKru-mmMK3LTj1*$;sF$k0P=Hz>LQrf6g2&V^^HJmpqL#HC-8F#d`QksEC8A(0_2+m
z<(wFJnU7_pCIZc8<N%6k0kIj&(oLQjKtZ6G36L)h#41ewtoJi=ODceNoB;AcYB|_1
z04+<b0Gh`b0OYfQF;f6TUSe)4P;3SeR{_;$U&;S*s35<%1Zb}hP>mQ6EBtR`Fs_)B
zoRE@`z>p-nHnsoJ&)j`R1;+asx(s5h_9P1%@v_SB_$Y8Octmm4F)%>Y{yFrcRk7<Q
zD>I9M(E=tlhA10mkQ0H{GeOiO)*ZBHY@FKIxUxHwpPAX2za_2aK*EU=EF!51Pg5Eg
z-PlSl99RH^KUzO>JBzeQE#P5RX3&)56awi#J85IyAp?Q7|0)evmc9xr{Tw8!#d?!N
z@nG8oiB%WYo^eqW;O+<%Vr$#yD8In};_(;4Ut)KC>o5EsmZh2$`LAZ*@Aox)4c>bW
z9)7vo^~sIqBkjrZ<@Y8(W|&z2b_e6j{nmMpw00EUY2t}{@zPXpNA-q4)9Q!?1#cc-
z%(mkD@XFRYFX5rSthwSJ|KqwkP1QaL8;(!ZlFCk5p>V;iiSN3cc9_J3w2sP2g}pnZ
z7e6uha_QQ-la>aCzmpeUk5s+o>HcMjR7Ye?>Sm9g)0b4N)@@mMyK86CvAW}}5lT<9
zHY`@%-qmK8ed*rKUu%}gDZXXTc^MzRc;%*tnOUy`&#|vo@_QBX(CF-0zvqRiU8Q@}
zzb>7USa@Su=(5Sa^QJ9b#9AMFp#QU9F0<C|Yd?c-f6+5#ahvo1?y6w1R>i%d&%ZY(
zXMM^#^(y${YcE5g{kfXXR}4ZD{|e7}+I?O#FyK+hgbhZg%KlvuKXZA}l0_4ON?&u&
zeXP5Wq1)=IHze*764DwHB-z~91U4{!k~ml+#>T2}mZ?Qy-=Y8i1wQ?EUg5>&X2vEV
ztgfJ9e}$1DGLh{vSYH}L^Z&CvZVp`&8F?8PG(s77g3U`wNK8yfNip%!_VUp?dFK3O
zU(d6r&!0Wxt#eY}%U_3KlMfFMPf52|ageu>(d5magSxwU8<lu^e0X|zZrT5ktn)Db
zHzDzt;^{xmO-tL`H%fCvq)PnzaN59t<AlK<@hOQ9CM1T4Cnd0D1|)MNXB3~)U!il#
z=e$PX1&?bX21W)Z!5@5ePJZ|rSfHbK&i|Ybi)Bj)`@}bl3c!S%loAs3?%wacW%`fr
z?X}<jCiR~7H}6Nk57!IjRM)Q;{~Pza`1JdzGP`~8rb>4g-L;8fh-66l$N&qc6ow}6
zviuzfzdV$konXS?`+|d=0iH)5Bvl+(aa`a)!r`j+Mw0?2uWX@(Wm3${$ub|^jQ0cO
z;~O&BngvCaH(xYZtigQv{%VJ9yv*#)5);B0FZCn{OB@uKx}52V4UZF#5KocCT;@Pc
erjUh9X&)QUwssuKP~l)Gc+KMmw2%1(1Oot;VAGBO
new file mode 100644
index 0000000000000000000000000000000000000000..2c2b3d81b1e99dde81af6760d2b17d037145bc55
GIT binary patch
literal 1240
zc$_QucXRU(3GruOV7bA-%>V>k1`Lc0Sb?*fn*sv^a}JPslYxQJ!hDx}yqjByFHo-s
zP)rhtWy+7m7Wg`b0QoE_Kt50{V+0eMjH7?Bz7dEG6te^31b!}o56QWS1wiv;fP8bH
zoD%~t^RbN7M4&!K4xpG85Sy_q-Q<}86a<Qy0Qu5Dtit5adOst#qylKi1t1@!mV+J0
z%1x{Qn#ULb<g<Y>QvgF=Vs0u>Yz7dw0M*ZUB<0*)kY8K^v^NB(Mhu7*{<kq0SIkLH
zNJ&Uwc+@Yar1bHRS-j+qnehy+5_+=tHge8vW8z~|6JTX94dDWY4OH!)LqA#-yMD4V
zvltjHU{Yg<vS9`}5okRVL``DdL5s%5sf~>*yEFNjnVtDt(rOMQoH)TElA7=|rGe3n
zt>nUi1wi<t^&_{lNSo9G9%f|*O*u{>kp8oi{Jjo4h#cFmvh~5T9p%Q-3%OR#WaHA^
zq0y?h<ZAB@{>)1}xyGuJnz5BE`40qRswDIunEo-EE9c;7=se^8ncw&3R~j=|RW!FB
zE^nNf%x`EX^Lxi9u|DQIzpwX2cl`A~u5Q7dC$n9U{e4K)+TeA0Yr_xA6@~QG+EmCM
zXN=n`eq8s-zs-+@J09FAl&&mj=QP=N!?^2^5GxPME|0>KJNr3=m@mn2>asqU3{Soy
zGfOM=yXa09wW{6guWT|{G&`=VPK7;b-i#zW;m5nKt@P@-G{sa@{fq6d)(C~iYc@Xg
z%T&(F%6b+YB7MuWY|D`~%Ow@p`bS(o9pT$0x_0JTFDu?pTAs689x7>nb(`9GF*J6?
z9i1=hdKPPNtzKT5#x-@_sWt0V%Rg98ty$i%GPiSM@lo!RZ%n^PxFsC<pFgYogsS0^
zs89BGEIy@~%XUSjExO-*#N*F`lV2ts4rn|3`^WwMhZ6&5ooPSS(yQ_|R;H@u_?lIc
zAubc&n5zH2e*7oXW8crbpg2rONNY%tWOHK^*ueNn;$V#!8>_-urWS>LhyMQ;`1Id-
zg%_Kf8JmQ#x`K-R6-I{0M7GP|xKCqf{(qLo&7o@|BQFDkMkwP>aGFR-NK8yfNip%%
z_VUp?dFK3OU(d6r&!0Wxt#eXe>)Z(+ZO@bX=Z(z_3@+$uo%Pf`dBW%1Id5G(GnOs`
z10zENqm2I#(tjwP{o&m9vR&shKj$<#xnp?>2~!hOo=#6p5SWnoL|{tdg9(Wy0!ayM
znE}ZiDK84o>95c^<#S#m@Pfy+5CbCvli&}&IwwDT4J^>nJLiAShh=9gkNL#Myb8cX
zos<$1^zPp8y=D53@9nkU{wDRF_BZcGzYo_7<y6<N7yldgyZH3`s4}~K@uo_57u~gq
zVR+4zuF3#O?+FPh3{Bo;`8y7Nc_=$O!Gyv01qV9=Jik0hsyMLXxWIvg!&U8#CIw7h
z*+L7;q?nnLW%4rL$*!n*CVt~=f<aSKikVazFo*o87Co^o@j-$B^Cc~ZS%NuC$`Xq{
tg*41)ckFO%a^ze7SwYLSK`Z2dj@^cx0)Y~}ER22Ad7_wK0CP4F0{|iX%}xLS
new file mode 100644
index 0000000000000000000000000000000000000000..a899cc9d2c8357a879176be5507cd5a6696d454c
GIT binary patch
literal 1256
zc$_QucXRU(3GruOV0pp7%>V>kTNoG_umWc{Hw6X;<`N+D0Rsc0Z<d6wk(*nHFHmm?
zP)rhtWy+7m7Wg`bcmTx;fc#vbx(FsV{geK|`bHo&P|Oa96Zp9VJ|yQR0@X090Qu%X
zIVT2Q=3^PDi77xf2T)84h|O4*Zt~0k3IfGUfP85nR$=mIy`Pa=QUSCB=ne*uS`PLL
zK+6&<faWm<0QqcS%oM<omzbLh6q^CWoeT`DjICFLP8Z}C1O31p15_gh#0vl07>q0C
zBqyXKBrqg}U;M-Q@sC-&<c^u~46YJ-viCM}&TM1iV^b4gWiWip`ICVGs`k&JAFYaA
zKUtYs42%{qsWC*^FoT>3w4Mo~Cb90IMPuXC#>SQ1nf%Pm&ipNDH3t$-oL~`2O?aBp
z!05(Sa^b)NApFt#k=t3MO=<xTvoeFG9H$US|J9(4euoVNYBRZnxRX-0v`lz0L2I2r
zQy#}k=B(@Q6lWY!>Q%li`-%0;A133Z^oP|yc;aF{GxI1US=Q~VF8`h*-{8DQ@!&h_
zqehQdifi0#ntbLd`E8U773??kKd*f6aNsYQk9N-<CmT)v$XLEzG3x-QP0kVJJF4n}
z%PV~EDa#%1w^O>;?BRRl_lK9<c?lO5ri=A*nSSP+v+zjEYaUA#y^b)A7b|z_?cCk=
z*dXO)!u2D%1<AYay;}9{(V96Ok$U<^R(<%IrMYgd@lw4#W=m{0gdM!`en(GnH*d&>
z>RUSRUKU@udf}3A<v(d7t#{T%rpbCM^CTpH-hLn}l9g7sB%HO^sOUpNcag^Yt+#tO
zwVHp6+r3V+>iKWCP}l7j-=@xcKJ%{Gsq4FHa;6qf68qD(M}9?A%jwUFTi2{P)a*Oc
zcf-Xa^J6}*+jK<q=A_TN8#frNjhBelG@Sh`Nw4mo49~RinP=L*{c7L4h3`_#6m2Ib
z$++C|`UvgUGoqjDoWpngZ+-e7rrUBt>lq+%nUIjykRZwC#wM_V@sq^C8ZkCjg|kd8
z3i}TI|1a?Azw-(&Ha9ai31M{w75giU43UX!m%;kd7@Gf|<#BW9n#jn@z@QPzxD#w%
zN<v~{LQ2XOKW#4`y_09oUp}jS)>qd{=cK;ZNgcfto@;dUR-W<n_18IZ_RMAj1A_~?
zT4z0VPoD5Ocg|Z^&y1zZz`)4Rz$oMYgY+MYXMZ@iy=>R{%+EPZPVQKqLc-L<DUYTn
zCJ0POoFY0U@xg?|649gtw#<NJkAxXd=fnp@PMJ9`aM6N^YgPi&amKO-vm+)we7*QV
zM9iG|b7pcB3H|h2d?482z=;D#POMmRXYcpww{gezR@dj<JiRCU&GaMR+yATF`1UVO
z|JUAc&!^qr`lhC4f0oNG*WHyn7&JTz)<VK7g`vs2EPuzrFArsBCzvq!zTjYIfajeD
zNfifH92Yo{aJZ_y(WHRMD_dw`nG`c~vP|KzQ`SHa?>~^o)+{KZy!oQRVh!fQ_g6b?
z<7H-VmY5L6c&R5rSmL0-)a6V^Y<Qe_gm{W9=CTB8GKDN;O8eM&wzcC>h6)FRl`{7?
Kpnc3QAQ%AXo#oj8
new file mode 100644
index 0000000000000000000000000000000000000000..d3fa259f9a8219187920e40ee33e8332118a789e
GIT binary patch
literal 1264
zc$_QucXRU(3GruOVEMqn%>V>k2N)O`umWc{Hw6X;<_aM5Ap-+rz`vqbrfzN_zCgV(
zKru-mmMK3LTj1*$;sF!`smlebi(q1ti1ZKEHv+MNVs=2Bz|SS{Avrg(0BD{DkZ%r@
zb7J6SK9-T1m;z*T0L8R`*o<ZACeI9@AW+N%$d?9U6()by`x&_<K=WB%0Qn%b9PAf>
zmL*mcfZPS-vw<;F07G74ZYof01`zi$Ft7^jc-4NqAiuZ-Xm0{gjTjIs{BL70u9%aY
zkdlzV@F;iLew9Z*bN3k)81HB3GKjI-lPqk+%PPa;qrk=BKb>nX0|Qj;pF=-d6}x`2
zGP4*MEnre(h_Yb@IT2_*6GTm7-9d}S#;J{sE4wrKnVFsWTheL{B%C<GB9fZ$G^K&j
zjjiOufdxSLqxB=Vvq+oN0v={%22D9mA&~y7L5_Z}4Fqa4xrC&T2<~A#s1!PfRj8y<
zAV_@0-9uJhcaJGunfNxO>!0Y3L;Ic9f0%x!HTc7$UE)7H6p}3K=2aTk%`<EWelsEA
z|J-D`!X`~SCAozj_muoT+87D;8~VOivO5&{%luKY&vEe-wa3Em<eaZG2<Id!%O%c~
zvCu3#xxeH1jlO%zc1<4tU21xAcO7QtiTZM8(MC63{zmVR9gm_E+K-rCWKy*?y>40l
zy+Ec-NA}IE3TB%b+qPH5Ru@Lbb}CK3o)q}2%253KxtU(m<D@Tz*{n`^qp0`z%?B>g
zH}lN8RcrfpNkvsDov(LpTg-NrXP#j01@oRB!PpPKAFTgyXpYv3DHEHg>aKQl*!D7R
zs_x#6-fwR$do%aF^wX@ppJJn*RL;A(E^yzqtEb&8)iV!%*Z3o!xH-T{KI}BxstemV
zFLT~0`scIpd%E|X3A&d2{G7&{KN=@r_Y#>LbEiw+r1jz_waGU>oU41jxQgplOo)z?
zn`G7Y^@{VRl=|p>it%fc{(maFj%l)>gc<`RJ`)ns8WJSg+}H#*Fn*FaSR=;9s&JO6
zMPc8e|NjL({dZpB#pY(lCLye@pkjZ8ks&gX?J`(j8bkB{vpjANT@x9385lG|8Fzxs
zOG!vfOh`%D;;HTBqj&Pm`O9au&-&_m>73N}I;o>~!gGy|-pVtcy5~;#Xlv>k7#SE`
z(A7HYseAH-&$)Bnx_V|TT?Ph5h6Y9%{~x6PP(1s?x$R}U&S!qkX>xMM@)Q!LCQf-e
zJuyLGLSl%(l*9)U62Ax}C9q`%BzvUHcswUQAacsgd4Y=-OkA@Pn3yw`J(wLa>EY|e
z4<cgb%%3xpqez%FZ}E|6hXW@L967OK$(_C5tKY^Q+gn|qck}d~@Hf+sd~g4+a^u^-
zIQ?IHzdfIJf9so?n*CWWyIgly?qImcS7ZwhvlNCV@3Q<I2fsX&ot<F9;QNAuodKSQ
z9wb#9SaDq7K*Hgw_C}KeCa-Lvg=JFA%*irkn%}r*B%RUUF#BKv%h3}#CTBEG9r*BF
zYeMef0|yn@mV`E#DBoalGjMsjlEIL_S)iGvS;p_Wb4V9M=!%BOnuKD-MFvuwObiP@
M^W*{TV}1d_00V~NBLDyZ
new file mode 100644
index 0000000000000000000000000000000000000000..cceffbb5fa7c242e0ea371a9cde8d5420a8b35b7
GIT binary patch
literal 1220
zc$_QucXRU(3GruOU^&9T%>V?PcNiEMumWc{Hw6X;<`^LJDgy(fW`U8Gw3}OqFHo-u
zP)rhtWy+7m7Wg`bcmTx$fczYwx(FsV<Bk5o`bHo&P|Oa96Zp9VJ|yQR768rT0rJg(
za!w4q%*QfP6H|a}4xpG85Sy_q-Q<}86a<Qa?2rax6()by`x&_<6+k=o0Qn%b9PAeu
z7;+OUfaWoR>}3OErT~V##N1S%*bE>p2CDbHt}$1<AiuZ-Xs-)UjTjIs{BL70u9%aY
zkdlzV@F??I(ey_@bN3k)81HB3GKjI-lPqk+%PPa;qrk=B63hj32~_Q$LqA#-yMD4V
zvltjHU{Yg<vS9`}5okRVL``DdL5s%5sf~>*yEFNjnVtDt(rOMQoH)TElA7=|rGe3n
zt>nUi1wi<t^&_{lNSo9G9%f|*O*u{>kp8n1_vRfk5NY)n%DB38)i0K~2?+%v#tH}9
zCP--L$j*pZq#?ll>GBbtJ?`@tzgql-_m{@o&O+<$LE3_+KR$o`ySRq;ftdb>f`3&J
zR^J33o!!_!@B0Ib1BdpP-En-e-|F2Xy$>?+iac6XRdc1^iJ7fR<(IzFS9{A|hP~q3
zJel$hALV7s75|hU55K|kea1qUR^iPVZzddcSkTYHyw2GrKw@H8N9Cl#*dlY+!-1E)
zqj#%`A6T=-Z|l8Ow=a_$CET)9!Zw}^^ES+#Wpr`lMb*38)`%K^)AlQpo2b0C%sJXu
z)iCtw7Y&1DU1c7(`YkT34_!1f@%-g0S%K%+Z(I4@GTLPEEK_#&rh7+2*L4?)xNfqO
z3!3~gC4PzT;*5jw)BYtM-MM$m#_VX_t-X9R9TN`yod4D`JfLUdpVRNzkL}SpGv`#W
zA&;`5;Qnl7<|`3eH|>75?tOo2TJ9W?#K{`B-xk|%@O$0%(?w+EhP|g!U;bxtlf1_Q
zj<bY>w1xypHa9kb4UC^84%UdVu_~NpYEjsC=>LC#Pyd})c(J*eu}KK4E2!9CVPuF*
zWV;O3m&VZi|16K2L)Sz`UIqq@P{y6$G?0>zn3#}~a>ZZU%SZ3zne&&=YM=Gh_0l=1
z@8z#^;_R8tCI$u<bhXZU>YhB|bMBnCuAUi7mw|zip@C7x{|D(m6wm%}ZhP6T^O>J>
znw;FRJcWd*i9e3%A3mU<aQH)TKwG18TVP;EqvR6DUd5J$CoT6c*rZ`>yV%81IWqX*
zi31mW4w`RNIegvy;Km&m_LjziPk1iPabEPev0-9k=fptIoz?HZ-`d+#{r%saP17sa
z-_Y-T&;Q?Z!`r`m<GxhCJ+Hez`{vIdbyqt|y30NnFfu%;O`6NV01c-Uh9>W_{2d3s
zJd~ZCV8Y=0f`gp_o;MyORUBAxT;M>$;i~pVlL98MY@vl^Qq0WBGKs0Dqy%RDWGyq6
z=vg2!v$svsRZ`+#9P6fB2@8oM4O_S-q_NCCz|pqCMpWThqCnDwgb9aV>U4MsF5nV1
Z=;qJSa}jY<c4W}8=YGWe0+@?|7yyMv&Wiv5
new file mode 100644
index 0000000000000000000000000000000000000000..20bd5f7d5e3ca372859008c1b02156a65db8a7f5
GIT binary patch
literal 1232
zc$_QucXRU(3GruOV7b7+%>V?Pe;61UumWc{Hw6X;<`f|F8Uq8P{!um_Yd5zLU!Yza
zpqL~O%ak9BE%0>=@c@cN0QtE<brDQ#){Xwb`bHo&P|Oa96Zp9VJ|yQR768o?0rJg(
za!w4q%*QfP6M^P4asb7&fY^*>=_bz%pde7p1jv^LVihKT*83T`B^5wBP5}8JwH)jh
zfR-gz0L^0z0P@+um??lEFEKY2C^iF#D}m~>|E7JGF32w~0ov;WR3iq&3jf;}j4S3O
zC!{1KFg#*S`rPv9XYM|u0^|J*T?R2$dy<8Xcv)q5d=$7COyjtKCPUT!IrO7dvFj%*
zGmC-I0wy(vC>v&w6M@z<LDVGH9kgg{oZ8s9vOANXnc11YC9UQ_!if_sBB=>aQyLiE
z*h(%OSOA1ST0e3-i?m5C;9*u~(3Im80_i_H$=2_%fynXyp0~VoI(Ro$I&Se;`G#-m
zt+lJJFfPq0$rG7#>{Yw=ZAq&FX1)WO7HsMd^w#Xz@s3Z(qc`>E^XLD6e<)^%c_b^?
zcVBnY0YM8p=HolM=P{|Dc=Y;!?uQ@B1=8UseIM{ueDXTAqSSFW`}?Z}Evh~bB>Drb
z3!1jSP%Yp-{ll_ATIV0vor6X@kBdlE%V=~R;u4jS*rjn{ajAnSH&5rY6EBx6GF^O^
zWm=os)K6uudzhD1)f;4mT3*ww$~ka!!r9{Rv&Lo{!^E}9y(X_&5@Y#u-k+dZrrRdm
zdv_vDqsn!;>f5YUeit6pEh!00c8+>3%6jdIZmq34uh(R8-&G~y`AbjEHQN@nboF<q
zf^)&a`Ab%ZY`o{0EzSLJSA+cXxj)$~_Df~$|Kj^Tn5WI~?Ek#0hTR7`t~5P+dC>5(
zwfW^V)td{>-<<Jx+tMdWZYw=z&wrp3U-NMC?Erz#i7oH{Y}AkNNY+$(9P?#1_uR+2
z`xtjQKiSU!iMxb^w1xypHa9kb4UC^84%UdVu_~NpYEjsC=>LC#Pyd})c(J*eu}KK4
zE2!9CVPuF*WV;O3m&VZi|16K2L)Sz`UIqq@P{y5L^HLHL6BANWOnkJxeDqG9Ie+=A
z_E}$DFP)S6TIWvqXlv>kn3xzCT+r1z>#2M4gwMHi-nx2hodyO*h6Y9%{~x6PP(1s?
zx$R}U&S!qkX>xMM@)Q!LCjL0AfB1lc!r>3`0d0-WZGo{Jjgm_odlh>Yp0(V+V3UTi
z?P3>4<;dWJCk|ZjIcUC7<?wa)gBy2P*jpM4J`o6#b=kz;&@i#Fb7G+9&g%EyZ|&`=
z{{HXIrs<XIZ|HZv=l}1y;qBkOabK$6p4Z)<ee>s!x~m-}-DRH(7#Um&QjWvIDTSfQ
zyDWdl!7mSGXD662_`cv^XMpFC2T2tNRvZ^NkZ`!Fz0stA$tzoEVVM*&bF$2`4cGYJ
zoSGS*VBUO?qif>Lj2VGb8Xvw7Rk+>O*zCyTv6>;%Z3AadLdU6K#w0m5MK(@0%Q@@X
gSBNmK3Siv)<G?c~mqZgG7KX<+d4NI8!2AM&0ps`7@&Et;
new file mode 100644
index 0000000000000000000000000000000000000000..8ac98283483717271605853db852cbef8c372e40
GIT binary patch
literal 1164
zc$_QucXRU(3GruOVCiAtW&i??1_nk3tiajLO@V=d*#gKs2*e+vxp&36xrO)w#r^>K
zl0Ym|ek``Y*D=HcXr2U+pUJ?$7{SD5ywN{c-w4D8irE2i0za3)hveME0tN=A7eKx_
zP|k^gm-$#mYGMkI%>fkC0%9|krJFo6fPz3V6Cht2h*g;US?_1$mQ(=kXaPAGgxN1J
zFytmy0L^0z0P@+um??lEFEKY2C^iF#fqrB*P!F0SUXWj00%QaI!XO633jf;}j4S3O
zC!{1KFeI@Gdv2_#o4uar&Kdm%C7$Vg?{BpDI5V;{3wJOv@Ro2YGcZ8a{yFrcRk7<Q
zD>I9M(E=tlhA10mkQ0H{GeOiO)*ZBHY@FKIxUxHwpPAX2za_2aK*EU=EF!51Pg5Eg
z-PlSl99RH^KUzO>JBzeQE#P5RX3&)56awkr8n8R-uz`qek=%u)Q`Rk9u&^~{!$zYW
zD$yJ%8YgGnl~5Ps44W`lF+SwQh4U}+zp(#em%Wu7dDBa?)uW?&-8;+gtPiBt3uK&U
zo+ii5^WjlpLv&5Wor8-F<jM^N-phS25WZ7+=eWX+37WgYzs#Gn>L3&6n&XV`K0YgC
zSKVjxPD${*+;@ee%a7NpIJQ{w@L3pk9}{EE^5B`6=wj{0bCgR+dr6PT7Vj$KkUecW
zZ~vJVa-KQ+Fy-sE6;BPMPZq8b+UfN=Y3r2DtBhv)W#@X_-Vo;XHd6eOeNz9O&<j0p
ze$3u2)g`+{TzYnzZ_@?2@0GDHa>Ad5E=`jAqkGu@P;2(WvTH?*JEg6aVv|mN-=7w}
z_E1aB(egMIv1Mz-kL49x_9a<P-OqD$#jF;soNpB~m##gz{mFL8rNJ8J)z-|{cCOW!
zR=8%-vc=t7KJr$`OkW3%kA#G@h6G7AH#UI{jGrV9)`+pODx76%QP_9r|9^o`|D9KO
zvALPCNeHVesMud&WQa^;yA0Ns#?bu#ERUN**F;8M1_q5##+~5!O-V>hOh`$Y;;HTB
zqj&Pm`OCUmXFYXKp71$$&RbW{%!Gl7%}otx+gtfRJoZZ@>rWW`osjxZ@!+Myhi~w*
ztTE!L{+TKv!IC1u$8pM_;Do^*fusbs%z)&Al#ar4`YUu!`JC4Xyx?&y#K6eFB>01`
z&dCp70}FKY&iSA7VY%6PJg?>)6O$X8nwy*I(|3FCXMZ<(clUSk>9}WmllH6Zv;U)h
zaNGCqRTtlHwcq|{UF!44zeANT>E1efn3drQmoG4bLc=75p~<@}f5*Wu4`pX3m@xRh
z;9zHfr|}0#6$e%v7dVh`xT?L;q=3mQTWDdK6f<+O%tyD?+zIB*2RXVX-prU0IHmF7
z`%s13ZH>*2JRYkVGTk<C_9S$i3T8}_V^d_~WV4)eu5pD3<EjA0%|8x2b8<;E5n^G;
OoyPSTXczMf2nGNm6R7O~
new file mode 100644
index 0000000000000000000000000000000000000000..fa2e6f3aa6dbcd1ecfa65126a69e92a02420e4e7
GIT binary patch
literal 1144
zc$_QucXRU(3GruOV5wl>W&i>X9tK7RtiajLO@V=dSqI464aB!)?VTOm+(LYTVlRMv
zNg$RfKh_=N>loqzG>-+y&tza=j9_9@Kkgr_Zv<ik#q5AMfuBp@Lvn6n0Rscm9U$Kv
zDCfk$%X};&H8BOq<^YOm0kIj&(g&s)KtZ6G36L)h#41ewtoJi=ODceN6o4EI!t56q
z7;+OUfPBUPAfFA4nF1K{5_405Vl#l)1!&iWC7t$+1^LA#KsSp3)rbMH!v8h~<BB=S
z2`LE)43AnrDouX;Gk2d+f$@HZE`u1WnmSe^URD_%9|bN3ryE>Amq6A2IrO7dvFj%*
zGmC-I0wy(vC>v&w6M@z<LDVGH9kgg{oZ8s9vOANXnc11YC9UQ_!if_sBB=>aQyLiE
z*h(%OSOA1ST0e3-i?m5C;9*u~(3Im80_k5mVXqgnqe$!dC;U1h-BZLab9in{RC9F-
zl4R0U$qe4D<6Xv)^5~q%$;~f}JM20iFyHv0G;gk~u8YeFzQcc?z1z8;LGJ@g<FDPv
zj5axl_fM3*vd1mYsdM%T-IAluPt5d=MnB=()myCP`nqTRZGq5@4*aQ4*w%dz+SzHn
z$31VM`a9+Aibso|@cosaaX6`8d9y@LzyW8Y^ftS<0$ftcm$)?li)``UmsVgiO-uMs
z+aBg;W%W8|mwnhY{p-_!mlI=_?u*cUdd710%q!B~Gm~9T-Ov@f#k^S7`1$>>$Ja#3
zTFg(otzs(?{v`C)#-K0%BtHf3;h6g~!Mp3T!PSPKPR;lA)hn+`3BNLVe?4u(2J8JB
zo~lhh+&C%tXY~1!*Pe?eXDO@q?_ahh#ba-=<Ps~Nknf$PaaQjlwU)Anehk*GV=_>z
z;{e4$LPA<Yf+U+8o4^LfPZ9@f#MoFB&N8(q>^t=Tzrd&e&MUmw+|1Y{gw+*P?5{8~
zL?*Ib2FG0*L-YT$JZ=tM6B&6K7&Jl|cY@<IB_S~}AtgmbSI^Vu+%?}dCv?tvob@@c
zVQ6k(kdTm)l#p`a-@)@AoM(M(=ef)u`Al9&$JVCjuEPPX!yB67+Zr7m+7h<{qq&{u
zaH=9(+5|RJHf=Wh=YN_`DNS(Xk~%qy%Z;rqjcZ@0s^mU9uD+v3f1aG#sXFs#<qe&q
zuLKl;$u21+B<S6}-+RmSAK%++zx_?>J?(GakA5Gn7s{!wUoZYQ?sxI&_fchb`{GTN
z?k>7(6T@IL(`79KBrH-Gn!L;McO3lk@UwP;34`AZ4n+oddVY{pabU%9fddJLtJ)cP
zmMBYfFsm=vqBikWC!?E#4X@YX8wL$}c`dTWT}B3f_Hw1%HYhOYV9XR%ILl$yD9967
sspW9yu)-0Ag9`1JLj|TPIf!Z{h{@lG>CotLYhti#<$l8eDJei007);ODgXcg
new file mode 100644
index 0000000000000000000000000000000000000000..2addfc4b29dd49e5e1d500fd031b752365f34300
GIT binary patch
literal 1204
zc$_QucXRU(3GruOVA;aJ%>V?P4h)P8Sb?*fn*sv^a|Doij)8%Z?_7oCR5!N}U!YzM
zpqL~O%akAMj`4L2@c@ds0Qu=abrDQ#^56Y~^^HJmpqL#HC-8F#d`QksEC8Cv0pyzl
z<(wFJnU7_pCZ+({ATcc<He*@(z%&CW2oy5`@}+@Tg~^}wenxId1<;N)Kt4z<2m1vE
zhTOyopm~e|Kt3B7GX*f@CFZ6A#by9;KG3f7i+9`T7UUO~0ND;eHDW-l@V|}0xMEIn
zLP|mcLsI*>OHV55X0PYDb4I^GiDx?B{P;#6XGV5r;SMGS#|*A$1_r3wKZky_Dt7&3
zWo9ujTEL{n5M{#*aw5=rCWxBEx`P&tjZ+&NS9WLeGc!B$x1`k^NH}qVMI<%hX-Wg5
z8(YbR0}FugN9#v!XOT9k1w72k44QJBLLmJ|C;4YF8A=?z-xHM~zSKNJOtfU74-0Fo
z$dN}*C9mt|NX|WIKhe{HZPzQus+MnTvELQ;x|-Kc_PnmU<w1+$ewFvtKR>B5toz8s
zfA#v2I~(2Wir+lGw!1jy@Qv#7828KZR(TJO)tA*A{OPZ?_m`@>v2^Gr_j9tpcN}kj
zEH!Tr`|;8<f3%PDa{Ryek@b1JVdEh|)>xyQ35OgOv~uKrvt^keF+q%D=cG;Zi%r_n
zf<scv?3CpjI<3Siw|VwvxaMBue&V3xG+FOi(wePZn=Yhu8J+Ezura!1L(-DO;2X-z
z`qT8R*NKINP7n?{HP!UEVX6ANE9r5m&1Q*P-maNqm?fY7YX>)XZddH0%Q?A8rB+{>
z8#dX$`?UD~m3jAX*rkgKNAK24W_A1X|NW7v^N&pMoAm!XZ{jMxv{j#cm8$MK^c-2Q
z<vdrWEM@tgRmFEsPtvojUG-f#XU&$<)#tiWCuQ%G6lB>H{j9o8Wj_Po{1Xb`_)17f
zYe<k}b7K?O!1zhxV2v0XtHN2P7KMF>{{I*F^xt`f7n_?In}o2sf{OhWMux~lw##6B
zX$;N(&+@oAbWLRBWnj<<W!wpl|CEHp#DtWT5N$nApL5rIPw8u(Jnwr_NAHB^8Xdir
zXFPS!o$%52JgI-)*wnxvAt5CxA?3oqgXcdu&-&QTbD2N#nY@sWtxeBehXY!N3uec+
zH99)9J)8$jBkerOvjv!qJ({JO&7B*I>l{-9)2iG$o7^@nYns@&aAs3}l4slc{-)%@
z!n&fgB+s-uxxjS_=T<r#IC0>}i4{xk?EPN-HtyKo>iWE!r}u=vnSSJZ`+t=i-~Pqv
z|JwWQ`Lz36-_+FX&vM!2y1Q}*!=oor8yTSClfuyCU6#M&;FpJ=wG&Jj{AO?{GQji0
zgQSWBD~<~sNH|>8-e^+5<dyv>T<wly(@Zx98(y!&Hw+r|@>*n#yNnF}?Bz<iZBSs)
z!I&wkaF)ZYQIIFFQp@4YVTB_K2Nl{chYCzpauC%@5R<<V)1lGh*2Lgo$|J(S{DJ|D
E0rgzQK>z>%
new file mode 100644
index 0000000000000000000000000000000000000000..246154e2eab0b2ce5bb36867ee858e0e4bc519e7
GIT binary patch
literal 1172
zc$_QucXRU(3GruOV41?e%>V=(84QdJSb?*fn*sv^vkQ=U2#8;Oh<v@&%`L<isFwrC
zmjq&&@?+gGzK$UtKrs~{Kb?VrF@lLr`M!U!z7dEG6te^31b!}o56QWS1q=*KUx0jb
zpqvu}FY~dC)Wj4Z8)Tjq5Sy_qePEga6a<Qy0Qu5Dtit5adOst#qylJ156HnF%zlA^
zAvduCXdYt#kk1CjOaTmeiMgpju^B)d33R*kj5Q3q3-XIgfNUM08ZjVN_}|80Trnp(
zAtfP!A!(udy6KO9=I%2pFy7D5We{UkQ^#t=%PPa;qrk-wyqW6+0|Qj;pF=-d6}x`2
zGP4*MEnre(h_Yb@IT2_*6GTm7-9d}S#;J{sE4wrKnVFsWTheL{B%C<GB9fZ$G^K&j
zjjiOufdxSLqxB=Vvq+oN0v={%22D9mA&~yH6ZdBwHV`;wZ&|;<TchMuh_3F*2MLl{
z9@_*?1k71E;cnr-8@!!Ox*U}=`(%If)VA5Vw%a+i*G;>+wpA=i@r(7{+UL848~EZB
z0_x2>WVuT|zPWK&^q#DFfx6Lg-;$%VAB*Yj?R#vt>mIYR>*uCxdqYEY1Qr#%c__BN
zPrBmB^2cgUAD`@C)wGk@E?9MahQs3q;muEOC^R>^@N53Eab^kV@Gw^Sl46q_l{_V8
zR^ZOP=TBBAEaG3TbU(%I+ogRx%%UeFlQu=_98X<&*~V~ZT7;*o(_1k+u@EV}UfK7?
zX;GJ>F4-9+ANe27z0~v4+Wi-fy@;LpG<)-v<Fz6zC4UVM_upE%_V$g<3E#DEe{T3F
zr2OuGc+_i=wh)bX?>UoJeNS7}eb%e3*`e>rdfAK1+xC50{c&z}SaDfIK=l6UTRxup
z7Ja?%=PHe#Zblqe7OZ-DhP8&#u5(H=10-$|64DwHB-z~91U4{!k~ml+#>T2}mZ?Qy
z-=Y8i1wQ?EUg5>&X2vEVtgfJ9e}$1DGLh{vSYH}L^Z&CvZVp`&8F?8PG(s77g3U`w
zNK8yfNtvRh=jn6qn(rxn&6DSK&z<nm_B^S7-q_f{AR!?oDIw*;zk}yLIM4dn&U2YR
z@|nDlj;&44U55i&hd0cPZ)<dPXiJ<9Oatvahm{rC(k8H(vQ@WnJpa>lYSEc5JwmL#
zDZZ@A%+AKF_m52CiI-<R{^-%4CufdKI`hY7j@jcfAprv;14AP%&GPqu<91Ike1C6#
z^f#mTqQ6x?{(WfAxoz+M>)mzh|L%NRu4^rSf4$Viyo-5qdJHyuycfa3B!!{LyDWdl
z!7mR#YbTg6_|4!@WPqpl2T2tNRvZ^NkZ`!Fz0stA$t(L&m{Od>qM2?EHoRVkZx}S_
z<+aEfcNrP{*~^u3+n~UpgE3Q7;Vg$)qaaUUrIy2)!wN?f4l1-?4i%WH<RGe*ASQn!
TrbDC0t%*Uukq4L~UqCPbbVjqc
new file mode 100644
index 0000000000000000000000000000000000000000..02dd5153115a78ee427ef0fb69e565d48f6bc187
GIT binary patch
literal 1176
zc$_QucXRU(3GruOV41<d%>V=(a~K#IumWc{Hw6X;W)~pyC=h?X_MGpgn_Gx4P%jUV
zFA2ml<;S{Xd>unPfMOazemVmKV+0eM48MP{z7dEG6te^31b!}o56QWS1q=*KUx0jb
zpqvu}FY~dC)Wj4Zn*%7O1;l17OCOkK00n_!CP2P45UVixv)<3hEvW$7F#+UY5N5x?
zz>u3*0W^;>0LW(pW2OLxyu{p8px6u`js&{h!z6QtK|y|T36QM=R3iq&3jf;}j4S3O
zC!{1KFeKUSuU`K6XYM|u0^|J*T?R2$HFc~;ysR=jJ_=k6ffKp*GcZ8a{yFrcRk7<Q
zD>I9M(E=tlhA10mkQ0H{GeOiO)*ZBHY@FKIxUxHwpPAX2za_2aK*EU=EF!51Pg5Eg
z-PlSl99RH^KUzO>JBzeQE#P5RX3&)56awkrI&pv2VFQ6<_SW?ayiZ)wY@X)CRl324
z!*iR!iGWF_y9;`BC*3&q>CwUq>{@q!bJWh`i~a2yc3do~qjksplJ9fh`!TRpw6=fS
zefZkOcELEA-#d;jf6Vvn-sZ=8Zui<B%eB=#+0j4o{}GS%)rT)H4voEWSY~RnJby*`
z9mkivGUYS>pDpA+ByaUD`Q7@BZjC~`n=_W22yjm5k@&tv(8=SBhqXqP(JftnZHaYF
zfw%5u7xAs>-n6o0*3~4L``sE-j5h|CZoAzz)zEcK=vwYJNiC7B?kpAo*+2dZ=S#iL
zJi)0QxX1SL?Br8gdfdyxJ{nqN1kVdee)Vk1l2taZYoyw~{L{SZ?`gJe@~vB4myY-)
zI&~hH^n3r-?OC0yrIUVFZ@M8;xmR<QiQq*Q5$})D{UxVe6`D_{tT#Jmn<^T-C0}ce
z%Pr0=wF&b>+TLp%3h>i&ja@xSzm{wM3kFEsBqXFYBuKKku?cKo{3LO(MvRSB;Ve^&
z!oEZQ{|kKj@4Ui`&CQHWLReiv#r_H-Lu4Y`Ww5?9hUWigdE6YjCNlCeFldA_?gX2c
zl8~5~kdiV*SI^Vu+%?~mI(jEO*XZc2Jmcx>uXEz;8Dm2OgM@^Xq=b|U{|=u2;5_SN
zJI`hQ$Y=6GI<_`FcO4FB9WH2yZ)<dPXnVK;m<-x^4reQ}rA=TnWm9jnc>bs9)S@$A
zdW2YeQ+!#KnVpSU?;n}O6EDwt{L!O7PtF{fbmosu&9uj*5&{NB28Kpjn&t2R#_gV7
z`2ODf=x;{vMSrV){QJ<JbKBni*SqW1|K0htT-RFu{(7m2c^C8K^cd_L{j=fWlETpB
zU6#M&;FpJ=wG&Jj{AO?{GQiXPgQSWBD~<~sNH|>8-e^+5<drS7d`>;1U{_B=h18U`
zjfo7gcQ~xmfC>CZwdjd$i4PJ4m@jEL%o5CDQkGcsDWqXWyJLrAlOx~q)e2g!4O$@w
ZbnG_l6bO{)WnuK~<<VeZ21XDF0|4v8v^D?$
new file mode 100644
index 0000000000000000000000000000000000000000..173907405bdd3af04d7f563d4903ab3d995f899c
GIT binary patch
literal 1136
zc$_QucXRU(3GruOU@2hWW&i^ABMgiTSb?*fn*sv^vj&j46Nu06KgiGO<`&`$6ng^X
zO9HV>`LXU8U&jy+pm`uI=?n~v5ln2_>-~fEjX-Rmm>m!&@N)@#NX|_xU|?Xn0pyzl
z<(wFJnU7_pCZ+({96&KGAU0!J`oJ^;C<qiY0rI7RScS=-^?pWfNd?f33?Lt*mV^BQ
z14C|N1<*Xk03e?YjF|!$@)C1Xfnqa&7-%ok6u!jtR|WaSB|tX|0M&>AvBLj02IGo3
z$q6Y52@H?=uCBWF@sC-&<c^u~46YJ-vUdBKX0|c$v8f5LGT7hZ0{RxJ_Rpaot%_Yg
zS(#Z3j21AdF+|xggPaJoo(ZBRvF@NnW8>7u#+BWf{LIYG{4HrU2NF)4U=c}8c$(6{
z=*CuZ;lKhQ{L%W6+gYSdY5@<kGJ~cZrw~a0+zETL4jYKH_J0b_XrHu@f5FlT4zf#l
z6i<pVNqX&RTX%>hx+UV^wMlFFFRE*lyuGxs`u>9Vmy;t~gSc8fI)1-=b;q7@$1!b|
zTczE;DUFQtl*$WQzn_S`!zsD5y|G~8?<dbsh(Gbya(zE(`)`4(8yZ|hcQ#A!ae4QM
zQGR0e1f||P>h^B?6!s^wwk!LcNt(F0A^n)5QBQ_?z=au;f+Y5dY>~b<ZN*O6P_rMp
zJ6XcsRjkU1tFS!dR<!6#$g*SNFWvNB-%7n!@mgcGWTM1w_d{K6SNYEbBpu5->-N@n
zn}1QU&5fdEBDVFX>bR~gWR}ly{i#=Czsx7;;OF?WVM`64?|$}ko=kT5udS;;&7IRT
zHRi<qy%(20@AR9Md0r~_beuNZwt9_bpZ0UN_ieZvYWm+-Yw2;{gT<?A7^lt1$%KS|
zLPA<Yf+U+8o4^LfPZ9@f#MoFB&N8(q>^t=Tzrd&e&MUmw+|1Y{gw+*P?5{8~L?*Ib
z2J1^>X#Rhe$IYQ@A|o#YgGMOhPOy0?35kgbDJdd4dY(S#uKD`woH%=Cvw?v@LPAPX
zLdu1I2hV?Sp7pVv=Q4lfGkGB$TbrJ{4hOUj8??u_H99)9CGG=8Z#&Q7LPfT;32dfp
z#%$)#|1_OibmmKs5NmIWFRL=MvoY)aBa?XI<yntEdi3YXnIn_V{IMzFHk4st>EZF|
z>G3*sw|f8ecd2)Fe}6u0@0seOb)Gf#Km40=-@pI5=zey6-p|<6=Z=40?Y1O(%j|Y;
zhUIhY(->f3k;2gAU6#M&;FpJ=wG&Jj{AO?{GQiXFgQSWBD~<~sNH|>8-e^+5<drQH
zruE)o$xJr~8(y!&Hw+r|@>*n#yNnF}?Bz<iZBSs)!I&wkaF)ZYQIIFFQp@4YVTB_K
l2Nl{chYCzpauC%@5R<<V)1lGh*2KW($$f)?`2_<Q0|5V|rh@<g
new file mode 100644
index 0000000000000000000000000000000000000000..c8db7da1f71085fa192009f054c896c03f68593a
GIT binary patch
literal 1188
zc$_QucXRU(3GruOU|GVz%>V=(PZ$^(umWc{Hw6X;W)C3qBoP0vD>QL+a|`hW>J<U<
zC4pF`{8)F4uVV;M4T}MgpUJ?$7{SCQq3$27Zv<ik#q5AMfuBp@Lvn6n0Rscm4<O$h
zDCfk$%X};&H8BOq<^YOm0kIj&(g&s)KtZ6G36L)h#41ewtoJi=ODceN%mFzVgxN1J
zFytmy0L^0z0P@+um??lEFEKY2C^iF#6M$}SNn+gERghm?0%U{SCkDg{|JxXhE9N98
zq$DITJQ7(~@w%dJ_IjQ>XY?DCc&78sk8kvGW@Kj;?qFh2=jA-azyMYI=g^N<#jc;M
z%q#{*3z*axqHLH!P6S%d1W}V%chI7-acX1Z%I-{lW@cypmb97!2`5glh@>VwO=)0s
zV=K9EU;z;RX#L3TEYc>mfQMO`K~s)X2&8}Sr1M^f9R!Z;UsCVD^6|~ly&7*7Rd0JO
zJnFpULi3jE_mXFsd3&3uY)`m%O#Q=>{zn(fKYDM96BU`2I`jU!Gv+gAvK(NId$_PN
zZ$rTw#|LLO_G`btQ^@`OUiV|Omio6ln!W#@ES&!Reb1L$={C04R(09BXvqBDak%}l
z*u1^b$8%loEq~1S*`;rHM@_S&Nzs%ui#E8joz|-MxUgJSspZIwEiOL(Zo416WNh;`
z_PYALtA-)XN}qe{*)=azYYlmxM(8BZ))jwrP-5<i8(L=#oLzn1@-eQg`aMgM=k2`j
zsc-d9YHBV{Km2*(J;Bv0#d>-t$0n5S3sbv)eCfugcBV6L-AK0Ma(4Tp`PQHFd1?E$
zZLH6yT)Qk8pl0y&U%tPuSSRP#Nx!Q<&3N5B_jS_ju7?UD!5^dF^GuxVz;^YEztJnv
zqpVNQ+ACzuT%&&ZOKWJ9L|wUHTTy^$Mc1l*3@c`Ak^sd|LPA<Yf+U+8o4^LfPZ9@f
z#MoFB&N8(q>^t=Tzrd&e&MUmw+|1Y{gw+*P?5{8~L?*Ib2FGg}L-YT$JZ=tM6B&6K
z7&Jl|cY@<PB_S~}Atfb5N6*ve+%?^k`W`2B^iFuL(a~FZ##8s)2_J1uT>~=%gM@^X
zq=b|U{|=u2;5_SNJI`hQ$Y=6GI<_`FcO4FB9WH2#Z)<dPXnVK^m>k-94woykrA=Tn
zWixLxdH$#A)S@$AdW2YeQ+!#KnVpSU?;n}O6EDwt{L!O7PtF{fbmotZ6Q9Bh2L)gP
zO-cy~dUx;l-ZK5i_x9Rvf0KGo`<wTp--qjka;odsi~o)LU3~g|RGHnrcvGdji|*RQ
zFkF5b3d(elut{NP@-EBYaq!E-&)Nwl41O~>6dB-Y|3Om4ffdIE4kR3|YHu_tVDidN
zn*Qvb<DyE11ePP07nt<$GQW7_cEfP72J_+js~xuSGP5^JObBDV)RQ1AaZq6Da;76T
pJWf19JVh3<tbv+LAq$z(J~p0h?KqU7!oiUJmd6HY7xN1U1^~6(!`J`-
new file mode 100644
index 0000000000000000000000000000000000000000..85879065951ac466e6b018339d8ede5cc7ca2793
GIT binary patch
literal 1156
zc$_QucXRU(3GruOU}<6CW&i>X9tK7RtiajLO@V=d*#yYk3&giWjAN?Y+(LYTVqbuK
zNg$RfKh_=N>loqzG*1A?&tza=j9_BZpY9*5Zv<ik#q5AMfuBp@Lvn6n0Rscm6CmFl
zDCfk$%X};&H8BOq<^YOm0kIj&(g&s)KtZ4w$X;n6R$=mIy`Pa=QUSE12IOE6X1~C|
zkegTmG><U=$Y%p%rT~V##N1S%*bE@{1lo1MjkCnRAiuZ-=w=z98ZjVN_}|80Trnp(
zAtfP!;Sqo8%l^kdbN3k)81HB3GKjINsbe+bWtHLaQQ%@IILV#GzyMYI=g^N<#jc;M
z%q#{*3z*axqHMrH1GJtAq9(EKphaWj)W*h@-I@H%%+CBRX*CBDPMly7Nlkc~(!l7(
zR&wFM0wDa+`jOjNq)lo853@3ZrW~gbNdM9ad$SH3h_v>9Vwa7wN_n$j=>#6Wpf(31
zQx>BsDQ9DnCq=L*T@Pxr@&3)Tw04q{`~vUzCC4|N2=LN8a%kWEy>{W>*$;@uDFoPW
zk8lxt@yN2MdDiz6z8Zz%J6qRPblo|&^+(4Y$L)olOEY3G?B<UY<^B@jmiK@yf8y+l
z1L;r1sva2@NeAt5duQ;kRZ@pbrn38>n5B)%`!g4o%Q`tGyF@8Hoj<3{F`w&r@=7Dc
zyc5+4Y2C@0+jdUhyGFm=tN)47*Plg-%g^0Bv*cdHDH-FSXYVFVSoNyUTsr54?2F#W
ztyTqgXUjUbx1K(GOulPlP|v@apMq`p=l)FaKDV7Om{()!j1PbF^|wY{_W$AQH~Zk7
zcYp6pyS-J0Z_1n#_p8z(`i19)NLyC_5lz>a8T3AeZ6%-Z)!L-3da~bjre11Z^<$^#
ze#Yet^=lX)agmUa){r2{=Ef$lf$@{X!5T3(R)w=nEeiV%{r@lU>A&*|FE%$bHVI*M
z1r_@%j0};9Y?s0M(iocmpXG6L=$gpL%fO%!%D5A3UP?k@VnRxah_0Te&$(;5C-pVX
zo$%4t)ZJiWV33fIl9Z5g;orgYADm}>Z0EVmANfpPNXOQu=dQy6t-~9d;@cV>9oiDN
z0;9W~=WwbbTiOIRQ#Nfj`{#d}PAxj~rALUhH^rA#nc3Nx_5P7bJn{0Z#~(fV^W@Bt
zNoW4p<V;H{<q$A1GB7mK(ky@fH*WXz!uR*)M}ISVFZx^c<KKt&oZI&9zusN9{_oDG
z<+|4L_t#5J%)6K;r^isL?y3zBj}(R`@3Q<I2fsZ0tes%O;5UOqkpZ5zA0$;ASaDq7
zK*Hgw_C}KeCa>%yFU{-;8DcyVj2}%jc#{t^?Ajq%c1GjWfe+ucCgdJIa8QA5Noa$K
z@(mU@1DB^O84UTG1)5o!W&FY&L%JA3S2RS{Bor$yGLYhAV)&88eFSJ1^9u+D0Bt*@
A#Q*>R
new file mode 100644
--- /dev/null
+++ b/layout/mathml/imptests/mochitest.ini
@@ -0,0 +1,23 @@
+[DEFAULT]
+
+[test_fraction-parameters.html]
+support-files =
+  fonts/fraction-axisheight7000-rulethickness1000.woff
+  fonts/fraction-denominatordisplaystylegapmin5000-rulethickness1000.woff
+  fonts/fraction-denominatordisplaystyleshiftdown6000-rulethickness1000.woff
+  fonts/fraction-denominatorgapmin4000-rulethickness1000.woff
+  fonts/fraction-denominatorshiftdown3000-rulethickness1000.woff
+  fonts/fraction-numeratordisplaystylegapmin8000-rulethickness1000.woff
+  fonts/fraction-numeratordisplaystyleshiftup2000-rulethickness1000.woff
+  fonts/fraction-numeratorgapmin9000-rulethickness1000.woff
+  fonts/fraction-numeratorshiftup11000-rulethickness1000.woff
+  fonts/fraction-rulethickness10000.woff
+[test_stack-parameters.html]
+support-files =
+  fonts/stack-axisheight7000.woff
+  fonts/stack-bottomdisplaystyleshiftdown5000.woff
+  fonts/stack-bottomshiftdown6000.woff
+  fonts/stack-displaystylegapmin4000.woff
+  fonts/stack-gapmin8000.woff
+  fonts/stack-topdisplaystyleshiftup3000.woff
+  fonts/stack-topshiftup9000.woff
new file mode 100644
--- /dev/null
+++ b/layout/mathml/imptests/test_fraction-parameters.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Fraction parameters</title>
+<link rel="help" href="http://www.mathml-association.org/MathMLinHTML5/S3.html#SS3.SSS2">
+<meta name="assert" content="Element mfrac correctly uses the fraction parameters from the MATH table.">
+<!-- Copyright 2016 MathML Association
+     Licensed under 3-Clause BSD-License -->
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+  math, mspace {
+    font-size: 10px;
+  }
+  @font-face {
+    font-family: axisheight7000-rulethickness1000;
+    src: url("fonts/fraction-axisheight7000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: denominatordisplaystylegapmin5000-rulethickness1000;
+    src: url("fonts/fraction-denominatordisplaystylegapmin5000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: denominatordisplaystyleshiftdown6000-rulethickness1000;
+    src: url("fonts/fraction-denominatordisplaystyleshiftdown6000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: denominatorgapmin4000-rulethickness1000;
+    src: url("fonts/fraction-denominatorgapmin4000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: denominatorshiftdown3000-rulethickness1000;
+    src: url("fonts/fraction-denominatorshiftdown3000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: numeratordisplaystylegapmin8000-rulethickness1000;
+    src: url("fonts/fraction-numeratordisplaystylegapmin8000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: numeratordisplaystyleshiftup2000-rulethickness1000;
+    src: url("fonts/fraction-numeratordisplaystyleshiftup2000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: numeratorgapmin9000-rulethickness1000;
+    src: url("fonts/fraction-numeratorgapmin9000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: numeratorshiftup11000-rulethickness1000;
+    src: url("fonts/fraction-numeratorshiftup11000-rulethickness1000.woff");
+  }
+  @font-face {
+    font-family: rulethickness10000;
+    src: url("fonts/fraction-rulethickness10000.woff");
+  }
+</style>
+<script>
+  var emToPx = 10 / 1000; // font-size: 10px, font.em = 1000
+  var epsilon = 1;
+
+  function getBox(aId) {
+    return document.getElementById(aId).getBoundingClientRect();
+  }
+
+  var test_loaded = async_test("Page Loaded");
+  window.addEventListener("load", function() {
+    // FIXME: Use an API to wait for the Web fonts to arrive.
+    window.setTimeout(runTests, 250);
+  });
+
+  function runTests() {
+    test(function() {
+      var v1 = 7000 * emToPx;
+      var v2 = 1000 * emToPx;
+      assert_approx_equals(getBox("ref0001").top - getBox("num0001").bottom,
+                           v1 + v2 / 2, epsilon, "mfrac: axis height");
+    }, "AxisHeight");
+
+    test(function() {
+      var v1 = 5000 * emToPx;
+      assert_approx_equals(getBox("den0002").top - getBox("ref0002").bottom,
+                           v1, epsilon, "mfrac: denominator gap");
+    }, "DenominatorDisplayStyleGapMin");
+
+    test(function() {
+      var v1 = 6000 * emToPx;
+      assert_approx_equals(getBox("den0003").top - getBox("ref0003").bottom,
+                           v1, epsilon, "mfrac: denominator shift");
+    }, "DenominatorDisplayStyleShiftDown");
+
+    test(function() {
+      var v1 = 4000 * emToPx;
+      assert_approx_equals(getBox("den0004").top - getBox("ref0004").bottom,
+                           v1, epsilon, "mfrac: denominator gap");
+    }, "DenominatorGapMin");
+
+    test(function() {
+      var v1 = 3000 * emToPx;
+      assert_approx_equals(getBox("den0005").top - getBox("ref0005").bottom,
+                           v1, epsilon, "mfrac: denominator shift");
+    }, "DenominatorShiftDown");
+
+    test(function() {
+      var v1 = 8000 * emToPx;
+      assert_approx_equals(getBox("ref0006").top - getBox("num0006").bottom,
+                           v1, epsilon, "mfrac: numerator gap");
+    }, "NumeratorDisplayStyleGapMin");
+
+    test(function() {
+      var v1 = 2000 * emToPx;
+      assert_approx_equals(getBox("ref0007").top - getBox("num0007").bottom,
+                           v1, epsilon, "mfrac: numerator shift");
+    }, "NumeratorDisplayStyleShiftDown");
+
+    test(function() {
+      var v1 = 9000 * emToPx;
+      assert_approx_equals(getBox("ref0008").top - getBox("num0008").bottom,
+                           v1, epsilon, "mfrac: numerator gap");
+    }, "NumeratorGapMin");
+
+    test(function() {
+      var v1 = 11000 * emToPx;
+      assert_approx_equals(getBox("ref0009").top - getBox("num0009").bottom,
+                           v1, epsilon, "mfrac: numerator shift");
+    }, "NumeratorShiftDown");
+
+    test(function() {
+      var v1 = 10000 * emToPx;
+      assert_approx_equals(getBox("den0010").top - getBox("num0010").bottom,
+                           v1, epsilon, "mfrac: rule thickness");
+    }, "FractionRuleThickness");
+
+    test_loaded.done();
+  }
+</script>
+</head>
+<body>
+  <p>
+    <math style="font-family: axisheight7000-rulethickness1000;">
+      <mspace id="ref0001" depth="1em" width="3em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em" height="1em" id="num0001" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math display="block" style="font-family: denominatordisplaystylegapmin5000-rulethickness1000;">
+      <mspace id="ref0002" width="3em"
+              height=".5em" depth=".5em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em"/>
+        <mspace width="3em" height="1em" id="den0002" mathbackground="blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math display="block" style="font-family: denominatordisplaystyleshiftdown6000-rulethickness1000;">
+      <mspace id="ref0003" width="3em" height="1em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0003" mathbackground="blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: denominatorgapmin4000-rulethickness1000;">
+      <mspace id="ref0004" width="3em"
+              height=".5em" depth=".5em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em"/>
+        <mspace width="3em" height="1em" id="den0004" mathbackground="blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: denominatorshiftdown3000-rulethickness1000;">
+      <mspace id="ref0005" width="3em" height="1em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0005" mathbackground="blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math display="block" style="font-family: numeratordisplaystylegapmin8000-rulethickness1000;">
+      <mspace id="ref0006" width="3em"
+              height=".5em" depth=".5em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em" depth="1em" id="num0006" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math display="block" style="font-family: numeratordisplaystyleshiftup2000-rulethickness1000;">
+      <mspace id="ref0007" width="3em"
+              depth="1em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em" height="1em" id="num0007" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: numeratorgapmin9000-rulethickness1000;">
+      <mspace id="ref0008" width="3em"
+              height=".5em" depth=".5em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em" depth="1em" id="num0008" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: numeratorshiftup11000-rulethickness1000;">
+      <mspace id="ref0009" width="3em"
+              depth="1em" mathbackground="green"/>
+      <mfrac>
+        <mspace width="3em" height="1em" id="num0009" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: rulethickness10000">
+      <mfrac>
+        <mspace width="3em" height="1em" id="num0010" mathbackground="blue"/>
+        <mspace width="3em" depth="1em" id="den0010" mathbackground="green"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/layout/mathml/imptests/test_stack-parameters.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Stack parameters</title>
+<link rel="help" href="http://www.mathml-association.org/MathMLinHTML5/S3.html#SS3.SSS2">
+<meta name="assert" content="Element mfrac correctly uses the stack parameters from the MATH table.">
+<!-- Copyright 2016 MathML Association
+     Licensed under 3-Clause BSD-License -->
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+  math, mspace {
+    font-size: 10px;
+  }
+  @font-face {
+    font-family: axisheight7000;
+    src: url("fonts/stack-axisheight7000.woff");
+  }
+  @font-face {
+    font-family: bottomdisplaystyleshiftdown5000;
+    src: url("fonts/stack-bottomdisplaystyleshiftdown5000.woff");
+  }
+  @font-face {
+    font-family: bottomshiftdown6000;
+    src: url("fonts/stack-bottomshiftdown6000.woff");
+  }
+  @font-face {
+    font-family: displaystylegapmin4000;
+    src: url("fonts/stack-displaystylegapmin4000.woff");
+  }
+  @font-face {
+    font-family: gapmin8000;
+    src: url("fonts/stack-gapmin8000.woff");
+  }
+  @font-face {
+    font-family: topdisplaystyleshiftup3000;
+    src: url("fonts/stack-topdisplaystyleshiftup3000.woff");
+  }
+  @font-face {
+    font-family: topshiftup9000;
+    src: url("fonts/stack-topshiftup9000.woff");
+  }
+</style>
+<script>
+  var emToPx = 10 / 1000; // font-size: 10px, font.em = 1000
+  var epsilon = 1;
+
+  function getBox(aId) {
+    return document.getElementById(aId).getBoundingClientRect();
+  }
+
+  var test_loaded = async_test("Page Loaded");
+  window.addEventListener("load", function() {
+    // FIXME: Use an API to wait for the Web fonts to arrive.
+    window.setTimeout(runTests, 250);
+  });
+
+  function runTests() {
+    test(function() {
+      var v = 7000 * emToPx;
+      assert_approx_equals(getBox("ref0001").top - getBox("num0001").bottom,
+                           v, epsilon, "mfrac: axis height");
+    }, "AxisHeight");
+
+    test(function() {
+      var v = 5000 * emToPx;
+      assert_approx_equals(getBox("den0002").top - getBox("ref0002").bottom,
+                           v, epsilon, "mfrac: denominator shift");
+    }, "BottomDisplayStyleShiftDown");
+
+    test(function() {
+      var v = 6000 * emToPx;
+      assert_approx_equals(getBox("den0003").top - getBox("ref0003").bottom,
+                           v, epsilon, "mfrac: denominator shift");
+    }, "BottomShiftDown");
+
+    test(function() {
+      var v = 4000 * emToPx;
+      assert_approx_equals(getBox("den0004").top - getBox("num0004").bottom,
+                           v, epsilon, "mfrac: gap");
+    }, "DisplayStyleGapMin");
+
+    test(function() {
+      var v = 8000 * emToPx;
+      assert_approx_equals(getBox("den0005").top - getBox("num0005").bottom,
+                           v, epsilon, "mfrac: gap");
+    }, "GapMin");
+
+    test(function() {
+      var v = 3000 * emToPx;
+      assert_approx_equals(getBox("ref0006").top - getBox("num0006").bottom,
+                           v, epsilon, "mfrac: numerator shift");
+    }, "TopDisplayStyleShiftUp");
+
+    test(function() {
+      var v = 9000 * emToPx;
+      assert_approx_equals(getBox("ref0007").top - getBox("num0007").bottom,
+                           v, epsilon, "mfrac: numerator shift");
+    }, "ToShiftUp");
+
+    test_loaded.done();
+  }
+</script>
+</head>
+<body>
+  <p>
+    <math style="font-family: axisheight7000;">
+      <mspace id="ref0001" depth="1em" width="3em" mathbackground="green"/>
+      <mfrac linethickness="0px">
+        <mspace width="3em" height="1em" id="num0001" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math display="block" style="font-family: bottomdisplaystyleshiftdown5000;">
+      <mspace id="ref0002" width="3em" height="1em" mathbackground="green"/>
+      <mfrac linethickness="0px">
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0002" mathbackground="blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: bottomshiftdown6000;">
+      <mspace id="ref0003" width="3em" height="1em" mathbackground="green"/>
+      <mfrac linethickness="0px">
+        <mspace width="3em"/>
+        <mspace width="3em" depth="1em" id="den0003" mathbackground="blue"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math display="block" style="font-family: displaystylegapmin4000;">
+      <mfrac linethickness="0px">
+        <mspace width="3em" height="1em" id="num0004" mathbackground="blue"/>
+        <mspace width="3em" depth="1em" id="den0004" mathbackground="green"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: gapmin8000;">
+      <mfrac linethickness="0px">
+        <mspace width="3em" height="1em" id="num0005" mathbackground="blue"/>
+        <mspace width="3em" depth="1em" id="den0005" mathbackground="green"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math display="block" style="font-family: topdisplaystyleshiftup3000;">
+      <mspace id="ref0006" width="3em" depth="1em" mathbackground="green"/>
+      <mfrac linethickness="0px">
+        <mspace width="3em" height="1em" id="num0006" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+  <p>
+    <math style="font-family: topshiftup9000;">
+      <mspace id="ref0007" width="3em" depth="1em" mathbackground="green"/>
+      <mfrac linethickness="0px">
+        <mspace width="3em" height="1em" id="num0007" mathbackground="blue"/>
+        <mspace width="3em"/>
+      </mfrac>
+    </math>
+  </p>
+  <hr/>
+</body>
+</html>
--- a/layout/mathml/moz.build
+++ b/layout/mathml/moz.build
@@ -3,17 +3,20 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 with Files('**'):
     BUG_COMPONENT = ('Core', 'MathML')
 
 if CONFIG['ENABLE_TESTS']:
-    MOCHITEST_MANIFESTS += ['tests/mochitest.ini']
+    MOCHITEST_MANIFESTS += [
+        'imptests/mochitest.ini',
+        'tests/mochitest.ini',
+]
 
 UNIFIED_SOURCES += [
     'nsMathMLChar.cpp',
     'nsMathMLContainerFrame.cpp',
     'nsMathMLFrame.cpp',
     'nsMathMLmactionFrame.cpp',
     'nsMathMLmencloseFrame.cpp',
     'nsMathMLmfencedFrame.cpp',
--- a/layout/mathml/nsMathMLmfracFrame.cpp
+++ b/layout/mathml/nsMathMLmfracFrame.cpp
@@ -328,16 +328,21 @@ nsMathMLmfracFrame::PlaceInternal(DrawTa
         7 * defaultRuleThickness : 3 * defaultRuleThickness;
       if (mathFont) {
         minClearance =
           mathFont->GetMathConstant(displayStyle ?
                                     gfxFontEntry::StackDisplayStyleGapMin :
                                     gfxFontEntry::StackGapMin,
                                     oneDevPixel);
       }
+      // Factor in axis height
+      // http://www.mathml-association.org/MathMLinHTML5/S3.html#SS3.SSS2
+      numShift += axisHeight;
+      denShift += axisHeight;
+
       nscoord actualClearance =
         (numShift - bmNum.descent) - (bmDen.ascent - denShift);
       // actualClearance should be >= minClearance
       if (actualClearance < minClearance) {
         nscoord halfGap = (minClearance - actualClearance)/2;
         numShift += halfGap;
         denShift += halfGap;
       }