From 6ded05052e06d9b37feafb66759382e9ee321993 Mon Sep 17 00:00:00 2001 From: kthoden Date: Thu, 2 Apr 2020 18:26:55 +0200 Subject: [PATCH] Documentation --- docs/Makefile | 20 + docs/_build/doctrees/environment.pickle | Bin 0 -> 1637789 bytes docs/_build/doctrees/index.doctree | Bin 0 -> 4910 bytes docs/_build/html/.buildinfo | 4 + docs/_build/html/_sources/index.rst.txt | 20 + docs/_build/html/_static/basic.css | 768 ++ docs/_build/html/_static/better.css | 314 + docs/_build/html/_static/better_basic.css | 455 + docs/_build/html/_static/doctools.js | 315 + .../html/_static/documentation_options.js | 11 + docs/_build/html/_static/file.png | Bin 0 -> 286 bytes docs/_build/html/_static/jquery-3.4.1.js | 10598 ++++++++++++++++ docs/_build/html/_static/jquery.js | 2 + docs/_build/html/_static/language_data.js | 297 + docs/_build/html/_static/minus.png | Bin 0 -> 90 bytes docs/_build/html/_static/plus.png | Bin 0 -> 90 bytes docs/_build/html/_static/pygments.css | 69 + docs/_build/html/_static/searchtools.js | 506 + docs/_build/html/_static/underscore-1.3.1.js | 999 ++ docs/_build/html/_static/underscore.js | 31 + docs/_build/html/genindex.html | 87 + docs/_build/html/index.html | 106 + docs/_build/html/objects.inv | 6 + docs/_build/html/search.html | 100 + docs/_build/html/searchindex.js | 1 + docs/_templates/layout.html | 11 + docs/conf.py | 71 + docs/index.rst | 20 + docs/make.bat | 35 + 29 files changed, 14846 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/_build/doctrees/environment.pickle create mode 100644 docs/_build/doctrees/index.doctree create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/better.css create mode 100644 docs/_build/html/_static/better_basic.css create mode 100644 docs/_build/html/_static/doctools.js create mode 100644 docs/_build/html/_static/documentation_options.js create mode 100644 docs/_build/html/_static/file.png create mode 100644 docs/_build/html/_static/jquery-3.4.1.js create mode 100644 docs/_build/html/_static/jquery.js create mode 100644 docs/_build/html/_static/language_data.js create mode 100644 docs/_build/html/_static/minus.png create mode 100644 docs/_build/html/_static/plus.png create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/underscore-1.3.1.js create mode 100644 docs/_build/html/_static/underscore.js create mode 100644 docs/_build/html/genindex.html create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js create mode 100644 docs/_templates/layout.html create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/make.bat diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..badf41b9afb4bcae6fa2c1374d5ec8c56f8b238a GIT binary patch literal 1637789 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%0DvAV+~ghJd$v1&o&yzB@Q) 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 uV?y>LA^XjMw$bzpQOnx;8qtgh$*W%S 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 >4><<(4W)pnj|}}J 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̅dBiQ`E&D;luVPQT^%bNjZ{RBd zhXFU`Yn;3&=4GpV#bAVNa6qXb?!gegkq8%@UNI~sb!psBo$bN^kAM}4(KdwV-No&ELkx)A%muDNkWGD zZ5Jo3zDuntBhIZJp{?$u6}2T7%CX-x(M?%_{eHrK3GMa#PRUSr9Wi4sk`U`}6%wVo z&r$TgM28iw)orcdJ9(y*5luLl3v~FC2n)rDWKn#ksqwHy0oJ(k-B>f8jOF9cCgZYA zf6^A7#n4%;1Iyx6$|G$ihyg`%sa-K}0UMPlk%k<=CYnq72F z!Zo4d8;^x5(w2SU5jTnoS8wRkR-154hBm_3zEhCZhjE*%gF^A0X1qM?Jfi=IaQ(fa zDCHMz(cux2`gqinr-z-MY7n5FH?}?*FEVo#+l0-#!CX)>c4l-HTi9*GxJO6ctQp1z z0gEs4>{0)4N_UXV=pTVrtaQNJCP?tXp&)UMzaNfifS#7Kj+!U@m(WqnJOqSSN{Ntr zJKtcX*sq=(Kx7#}zPE>4+x^)f<$K%}`8lAhCo9O1za8Gep&^A0|B6B^a9XsJ0|2gv z7alGTcMGB`79yaQ2#iEDLc-Hq;o)b?(daP(MZ53Q<-rU^JgHG@L-!u}7#Y3D2Y4_7`SAt`czdD#jH4CpucH%>s@ zo8oI@T;nrtNh=EGm}1o8FCr{tFLA?)^mbm*0Zfafj5x(kQ1iMIk{~GDHIMX1Lq2kk zg=l7GOq*=dr8bIgLQD#pWi;e($1kz`%Z4VRs0+KkVxHs z=fKc)VV?Z_FUhWcwb!20F3oJHyI}WkS>png z*Q5aNRmqf+3PR=m#3C-kY{;bXq8KPiSS4E|A6BGs^Yl9^4meCwBQ_H^0uLKLO03_S z{4k`m^~-iBmYO8EQeb2fu;o_tGObaj(PeAK8hO;Md2Rzk`I>lOYeMyoT)eNSKLsN7 zd){$SDBcl|yCY0YTYL@si^WhtW|A~K*=nKu#o*_ENdg} zgkVstwThXU5v?LH$(9W+BBiVULY zwcuqVi4T?pfh*$c?)J7kR86s?27p||&>(aj&l&wLO*hkRMp4u(nTFtd;bHcaHrh<7^H6YBF=7@_1zkyo zeBy6GcU^xS5`ymsBiY}rX3=}mTO1SuT2WC3R>9!}4Fi(Y&Ek*7v`VR9!MdqCWy6Fd z45(u@SU6uxd4B$>IDS$pRTZt1fK04tSAaQx8{Q2M`;9eG85P&fiVju4wwhE@fmt7h_k&q% zO(CNw#@_<1)tU$nBR&bQMMjuW+9#!$Qmi5h#CAiZ0E{Vy$kt@A95vfiXp1_3Ga(Ye zR~pe$f^No$2o58D83Hjxi_L2-=~dC)2+Y=q$s}OVZ^Fx|K_gn%(_+;BZv8rVxB(Fe{#+~g7TajNi{ehBNpk+ea!~HQ0 zInU%sY^_kBLFgxRfSB;%%afCHGI`4c;I7d6!~070TdsfrhU&%W$8_jbu?7%to9Ms? z(qR-NuK4eZOS%-zM*yUXr$Oivo`aKdGFF^BfY*f#SP=2vJe};nSf2@q2sTNCpikpG+>elrV`=R)9)qFk-J~`E z&195x6@!A_&0^k?Xej?Odx?7?FDJBchbO5lNt7Y~esZHGV~T)3fO#b)*!6M7u>GVK zqZFeG8L-7D(;bUsV9_r!0BsTO?Ni6L6iSM*!i-loC{=+y?`QAxlw!#i#ZYR-D%%n( zz>W{Icek3u$?Ujf$+sIzJ5mF-e3IGnZ0FHy8s>O9DW+w`kWWS|hfJ;mn?A@0|F&$F zzM6~67R7*F1}mE*Bw$G%Q|7U!)JotJQbaD_Tuey~*pin!D0AXAKpZ%mD|bptuq)41 z+goRyt6~M%k;m2cgpLm?E-TqwTuF@;wj9q}a?}QG5gM@N@3IWALz`&_r6`RPPj6!d zPpcd({4}%hJ9DVzpey?xy}93M&|4%bNlW zN;kX`_nwMcieuFcL~02f)Gl~64qj1&DHc!{R1C(`d1o9Qs85T#c8}#!HboZ=FB>=T z!IB_wU3^{I4y{Tr$DZ6jIimoPselKuOL%h2rZeG=qCbe&rI2G4MQHci z#zdF}k()4uJ)s}qX&iEj*(Fdihaw~-L*Nxo5vUG4$AXAYZHMW-8nvm-fPnX@jlV60 zS#4^Ic@TT|&@{|n4;y(txMH+djtWH_u&?oX1NK(IE&6MR&U2Dei;8Y~K-lOn5Fz&t zodZ1W@P9;VRt&hC7cJi-K)rKl78dN812$=?F|RTxOcX1+;sRvVTG3FyK<63r`oH_b zF`YIj{L-W~`?A#%An@OH{0H~$3-~`N3bY)~6p$~1Os6u=Ca13_3v@?<0>Xx`!Jfzs z*L7jzK;U0?9z3MuuxZ0w68xINB=;e(pn`CE+~jlAn)XDl0TL8$IX_)l*74Hh76kKq?6gCPh}?$58v<2X2YaEsaV!$Pe2J6o0MDF5dTH`mRa4<47TY2 zgel#qC!2(dwcaVOY=yo5Ac(-6JL&7RgKA(7C=^*vae7G#D%ug~FyKb|o*DiS;)+GB zDWoWF$q@b^edk~33fvyuS8DqI!T`m1R0=B^AQfQ9_4M7R)NvO2iXq&TQPekJ$lgj{ zd0|tsP~KE702|_2tmlEgsaUtMRUqZFznNm5j|cUZ&ZxLrpS}b@;Wf; zmnp%WRc$xPZP|mXMSlIWqG^;=P(`bXLNM!-m1a>^epHl;}X{`8SJH^{E-=hz{yQ^~{V_7t~$Jnol_ z-FS+NgmxO#Sn+V=f=%q*6*1A3X2roPy4DV#9|82 z=f`7vM$5Bj$x$zgz9HVV^cV#EWjw<8Y*V9R+#K&`5@Ju|B|2ejmsiB_0R5nWHbHxB4y=oOAM9k%_H&2JJ#>5e4+iq)uzD4yiXk>dxti zbYZ<>>^QPsa-eX2No2!N=gw9K3$;GL+0j;3SN{b(zBvf=U=vACs0s0?;rZ+$wMKaNy$J;0VaWeZaOh1 zpuBkg;tPRSEEaLET6ly3`%=Wtx(S-_vCNb&ItkaO)7g;Dyn8XDGZK$q@ZZTqizW?Q zh7~IDf=9E-9xbaOIrFawF-^92uUn;r1(BamXA|0gw2*^biugzx!5#zf`RSaRGjrOS zMgJA1Yf2MgdJF>o!|8FC*EgB)Iqti=xlLz;vW{#eDTXd0nhmbibXaledtOZ1c{<#i z2%3dl} z+9E))U=IwdR02ZoCY_*X79`j?if#8v1fAkgy+Co2MJPn?gvZ_Kk40U@Aq4@H=%(DF z^y}$lG&%!m$%XW-VC*vP3O|THY5rPMj|JukVhoT1?AW0aeg9(%aUEx$2M_vK=W;e~=&N`&Hh_iV1C7+fmo zSPtmt<_9#G-ZB3bA*N_j*jHVE1q#q_&*{Du+0gsL$zujdv(++yyfHsqOb7Pva^7mY zogbR1Xy99jwY$iJ+*SJ|ui2&PR67S8w~92W$_PYS0tTT=R>+K4WfR((nmJVoBuHGb z61j!-|iE`F8vFij?uq$yJvC z=HXG4fHgP8%OT9->PFL}h_hsFLf}I8J*j&@`|AhA6sb74PoN6o5)KPwIpq&%4yMLI zuzopJ5IDh-kaW(-k{|#}WNHY%#|EsQ8Uh!(GA_Ou58t3TE0hrH$3;N^mdKKdAGF!0 zV8{9;RfdNZSLff4hKuHlw$-AF(IgOTe#miPn)4&c}4b6O)uqe_d1&AdMwnxz$@PSdn(h+#b_!60>krR;*n`^k}FnqEt+5h#G4 zWB7Apy&M%+^j-K>Z$20RU*uou%y(LN%-1)GpivCx3wDG7{;I=2n$0FNw-_icE;MN< zHlHM76l6@;({Imr|3U+A!im#{eV_o2All}gG85S%st6)rfQRkdrjlIOc1Ho+*iN^d zeM@W9*0nvt0Dp<2m)OI-W4>5YCQZ#iKpeL*2Li@^`$INAbK0p7IU<@J9nx(} z&-mb{(Zh7LsAe=RKx{q>pCc$Ve==XlG49ikFcAQ>%S7YtTjhHVHT`G%zB4>wLFJND zDNgfi@^CKVQP8+R8q5BI4`rl(L_W~;pY6+VBLac{-h8=B(~Z2}&8^m4&?VJ{{XUvr zPC!}3@YyZ|jnL4)9O=KH$x~U7Xadj?Qph<^#+xmu2mIaL~UgI%eikOyYnuZU+QpV$;bjd4iAJevM zIV`1VGn9243@XvVKhW#D-=H-$G zD`h#Z$Wn&o^j1)zeOqWh7&Se2?SgPtkwjW_Vq}Dd4Af2-xh3vh#0yYoZm5TiGoE_Pqk?|9E76a z<8$;*Uq!X*7+OJQH0dY%w$_OyOM}ei1*vvyU$e`9i(pgCYMb|Ma!X0jIM2@v7o8pY zM+TQ-OvJtG6+8#@cNa7}M=OXsJMx4K#drwbwD5od`WhZs4EgxH(P)y4cPWvOU7@1}a2v#vVTH?KY!4{b)KwtK5vR?Xr*gUNsSu8rsBSgmr3lz{ zV>H4-_EwyJU-ZV!!0w6_x|#unRS7ueLRjQhnrc{1Gk4d`t$_;BtFgDXo)L~J4kw5S zS>fl9kQ3Qudod`tMc2(P0t{)9U3NBJ@>(LqF2;e9bRaZ+##L#DaF7udSJpCFx8f4b z5|JCJ2SCkWS{5y@&sjG&Mp$?l%ALh4o=@DJ>?R$T)08{JkSR2V7A3h<+D(h|btOF% zlA+8YgJ`mJpNDXFd$Ln|nlh*4Xv~FhXx-8q+tcAV4c*hUZcCzILNMe)7F-;kejd)} ztfHJDLQEtcPR-fz&g;gche9%xr)1uD!@+(d$KOv=o|YVRNXXq-%;>y1${4SkS#Q6g z!EZX`M9wy7hGq@K=8Pf_a_6iZ4T>jwI~2=*?5mN8r2u`?{Jz`kzv`G4*7lOhm*lKr zO>D7gh7y!=XhD>ALib;7T2w$G`hM`#1Oc1(=uN-L7tJY_NCZ~mZvhPhZkv~A6%GyA zbskRWT=_Bei_-R^rV{4BcAOwz0z>+0EL{-QWRF#%4hgv{LN4nMXqw0?)eI40*JH8m zac??5n8?hpO}}kH>Y5y8F%i7xC(f%vaNXbyREWO4Ske)9Lgdst%Pj)L3v}uCf))(X?Yu9N z^-zi>U+!g_zXb^V%YnaR9uUTBmZDf}BH>t2ffw7f$9yARI1uCoZJb4gD(iF zZ=3$-^5C1gkg^=m-{PA&M2b~pw`8NLK>&EsUiI;S4m#nhJ_K45_Iy2v>!z4LJqQ9f zt-u!DO-)M#8viYMk9nSRVC;W~r|TMooQMh&#`M$|a{_uhe-W*DdSvbQ*Xb z1&u4vI9@cg;GCWpu4tB?U{AiXuy{T+&ah?Mc4Tf!JvcK z=j=<~B%}Iuu^(7aL4I9PNYv%m1PHz0)oeoN431^BSnCy7P~obV6XgS1-j()eHET}t z#0C-+P?ozxdL9mwJrs3ic}#=SdFRVR-moqbw5HXQdty1Dp94L0K(oB10A~!?$SE}O zc|Pm6T0UfpY*3z^S;bxp}>uT`?2tDq3a{cOl-sY-lTrmWfS0E`7 zil|Hc?{Y-7t}cmSsSbBM2RqpaT%Aq?gAP*ObKWG-3^vq$h-pwlE}|_()D)82AnR%r zkf4BahDIP3lYX*!udbZ&C}<%5Up6$uH6Nz?_Uhs#fkpMEi;6G>#!kvbxeTra=k4di=&+J*idK&z3x> zp)|v35BQXoPx_3!a$(vt<+dj45no7$7{Ah|kcJvGaNTAE7e;+qYo z5~e{Z4aJwdnMY`?=a=O{4K1CWigP;(ty+Tt`+|Fbzf9W9x{=~^1jd2D_qNkOr3j$9 zR@x3@z()PTU()7Lfv>AyK!O5V{rr7iQ`WWm0}CpsVZQB+=zzSeDOgv-L@?;wS&oNP z6Vs+u?1JB+4-e=-JP~w?HB=sCdQ1LOhK2Gk{3B216TUuTV6L+pPKpL7&SUpHX+Rqt zc3koA6@?WuMjjxAJq}9O{Db^c;fe`GtJouQt>l&osb<&Uh&WwO%>m)tRc{#kw!IuK zn*aEJpa1A@e#HNaTmFhd(4%r6Ef}J={F7Y5uyDam#qtJ^Nd*OTg=&5tzy?$;G*>;O zvx4l^k6ZMYh*HJs2JfrENQV=0i}Y4+f7m}0=|F~bNLI$SO!YLuYzPI14HSZ($nbeK z89$&ENjx$YjEj@A;&e_)EErG}fk7Y0*W+i?*jL3$cE#c}0kZO~XsCZEUW(Q8&VVKwV!_oWSU&8y zE$lFN>=gn*Qw*%OASOfmgEs9v2o&cZ3RoTlkpZhhV4KcdE*1Lghd@j&hd}hiS%g4_ zhZTS8f^KHd4E7WF=6ITW%f-Rhv;sc8OXGi?yb&?M#&L3@6m0uV0>R>fhr@lUo!gB2 z-y1b9*MfC-6YKcg=Tcy48k;u%AYe*?71Ln>$`QQxphtI1KHhmzvSMc=p^_@Vk~A#% zRMnCdn+c1U4hvACBP?2iK~tlg92pTD`Y6x5esA1A{)UcqpySz+`EA9yvPse^C5XpT z0CuD?!Mj1vE+%3+Eci4r{_CBc7b{DX|GAN*S(JfIpA>9*KwDmh4K)w=9KU28&mT8t zQmO)reqFH0O_7^pNlS6|?;EqKqy)=;S+Z{ri(GH8<07+d}k(duL^4kb{k-vg&0s7|v)#Rw;#TuB=K`V9|Sp zP}?qsK`jFZHJQl<%PsHZvRoAImht_7A zL&uKZUk*p<0gQ^tH1oQ#It4-D7AT=cl0kU!{QYqbRcuOHTLV1ODuqlllYKRA$&D{gbo8an8-O+#dHk_nWDo%>JlDg zYtq#big`Y~p6SGEB;LbQEMn&8T7pus&mO2uFy+F-%XnjNIPQ&Tm4-+(iaAESFBClt zGUxCZB^aTgSO$Vug#vQ`|LADGPfd!w&Ve2Eve&LY`07ci)KnDQ9=A9ged<57uwlge z#Rp3kDE2RVR;vX7L;gMg3hZq0Uz3OsoJIAB3-J##@h4BVqvzrljAC@&(~9~M-EM;2 zUxjems0k7c6K;9C>9#6b6W00K{wvbE;@Aq05$-2Ui2epo&xgE5s5>`zPjosSGFmX}7l9I+Wx7#jq*7R= zn5PRorB#s>jCwCXVx#_z*MoHCSx5={CuFjAAKOe~o7f6kyZV6%c6Ofwb6yhkT6+ZHJ8b)>D1YQpzfZhY)}nK13*DxaBnOP&%R}8P#GuO)iR@Qy5}V!i*LH7-H%yP95=c zVdG=mQ&6nqL4cfKN8rN@Qz@_+MBw{v=|J~;R1pt%my2fpgc|cAM84JKW9B)S2$EI} zSn~<|C_VXXJF`bwDV)Y0rvi&iQ76Oa$(WAV;r2?eRMaVEq~YZ1Aj)N6lTSJ!l*~E9 z+xg8dr%1vlSwqJoI|0~n2aW_g=*EleU<*aR3ZT_C01kcAc93yHnfawj#Uk0BqJ&*- zLBPX?>+Jiq-|3I|cAbtr;z5WjR;)_~vP_PJ=uP zagUBu6sn4GR*5L6S}G*D+ZBbx7AX#SC9IHD%)v-ZK{k*f&FL$WrWqo$k1ua4D<C1*^vL0lb_r192!jH9Pr}7ia{M+2a8Q{(Abm{ zbYRwRq*)IqeT`+h9?fdYR!G6PB+TfI|CBIm(}7uBX+*yH$8EHW)TC=~M6f~>rhJ%@ zM4cVOJTZVa5p^r1U>rAwBDdl<3c;jnFh{&XFcl)q1>|~c7Dn{?{u93tC z0|Nev|MvJ#!zm9+iZr0uv z^x4M{`Rm&><(3@fs7PWZrUfBV-lAbaxjk7i&sM}T2h_KBsf{Lg8&z6sL7v;En@wex zxRPr@;Qri2oeT*@!Y_q{XMz4szjzIwV#>6P$DMxQll3%YFiwtGs@MY@ zXO&@YLE!#uFr3#M;!_F}pknrP)RXtbD5g7F*aijmTLW5UBQkeojxiiif7*<*z));K zE*b1dAis6cjO1x@mG&AAs6QR- zwE+e8J9PTUaGuqel`WJ21OIJ0%W^1(gDTq)76k5(mof$`OA4ZZ_|u~UzJfrM6_xSl zNFcv`bU?>t32#Gbppz0m+oeg9!DrLs zzI1EFfZTFUr?UK(m?Jvo)b>ieKnode{`9lYvIfTrKUXS=7RNiEeP+(jO759m(J)xa z1`Bro__O~Z;^q(SmF+67Pe?!h?7rar*HiI^gWpA@M}o8>k*~7svvBUsk3V}Nh^Mvf z^T@V;5u{q%{t^-8G0wHbi6{Q#v*!}IqFP!RfRn)d@np4n z-yeVWtsvEg;OmI^-T%+qyRFA{BWa>NWm_V}GesSJS}xbYu5waUlI`mD%=Bzol5OqQ zsU*2vJ=3$flguQQr6iM;2TAl*KL9R0-#7d9`bqX55eNXW)=F?CNl#sr#mvMXfj}S- z2m}IWg7`W?{HsBnwYOg+NZSVKq`lov5N+++lOpaUh&J#1q==ma(cWJ>DdLL+v3DkN z>?Mdc@9v~L#+PS*(fa$D@c8$HN4qATl*btQ`bEn=?|D+hNy6hR)9YF1%I67^eK7r` zyu}C7KR~eS5OHZ7_HDLWJv=wl?{(ln4GvoScs#`L{nzO$AZoP?aUJAFg2tib#OVlh zYN+TMzLd0YS+mgK&@*W~op>}8hM1k-XGJW|cSFqHi#RJ{@s@-kX05_m5sOyB5c``^ zn6n}loeM+E?nlmwSlkX9V%Bh-6|rc@3^5xaKPzIL7-b~UwPnyA%>cSq5nqX455n?hF8|=xsX^9qn zCSXco%~R-fi9^Jn>`K^R(>s+;v|HMZ-S!!FgTb^LN};mpJWU6pTXbHeWbONDprdR& zv~}c810A`ZXRa&S+MtNz)G?*WVKj8DcQ87{?R+R{r;BG^`c{7$7y<<-sjB}tpz27k z{%tfk*c=ZA@KQ<_C2Pj5 zmw5ib%>D+6YI(8|R;ex~RIM(ap-7Xl>m5||^3=j4<@C7Pt+m)Kyw+18*&y{UFGwP( zz)JJ-VQ=SUzf0;gf{wNi4hDEz)UFr}`kJDY)HV64)ee6Bwd7;a?V(8a!MKld^VY>V zJJQj~S+}J3yZZy9uxCdzZUZ+gO^gEaUVkR4G2~MkT&$Sw{c$I|<`v^DCDrDxA8&aQt^UsgxB?guL{L82yy{*A^ocnpBs zm+TIGmLRIZGqmV8XG@C_11%i2k{L(WklSB2s|{}EYWq^x{KpEaCH>i zw+8Nw0!*Q&s7i2If8T0VvI&~JDek2+g_=n$NJ!xZiS5|wNin4MDiI@2T($?L>pKk! ze5+WdbSy@xFX%5@Hhz108ZnX^X;@W1J&kxe6KPoEdwLpi*^V^q=%1cOeB&b0u<^^& z(}-ifG{&8Z9_>LY8-fPevA%Ixvluej53B?t2b2BnQa0&n$;4EL)j;M@idGtfb6Pra zfr#B1b`N1l&y-9I5-o@BjF8G=*S*trCWhOi0#K#!Gwn)@z{ioPvtg(0Ow{Ii6`9?K zot8k{*#-hOPv^7*q7DZFXFJ|ec>@6(<2-E-qS^)mcH@0o0#RcF0een#S^`m90|9Gx zPfH-G>FRj!vU`9EP%yjQH)YSLfrlB|mo2ZyO;QzB!f$I#{8^BSlVc&0vWxp!kcrEC zLdH(>vmg_DvqU~CJInNturZ98lo>sUlg8!YAw)P=>f5bG60nPioEs`l97$%ep31;O zDzQZ+Rte>tt~>GAD^RGo5)A@j8G$jJc4J+;Az9CK-e9EGWFIqKY6++kyi_8HW7$dR z5Tn5^G}Ap#)8i`HH6=?MkKM^ZDfjGjV;23`6(zIZ8&S@hk>%-##E3!Y%fX-pmkEJc zL#DxfqKx<=riyM^`&2{gbX|(8T#(ynvcF$0#CSR)ait3#fm?I7W3v}*P%v{WG&3%z z>qgwigeglTUhW{(!MX;go3aV0DnJ+Gl#GoroKDx`lB(!7#p877afMU#vow=&Dk{2-TAYseXz3N*28d6G z9!lyDsCI>L5ef2M@v7{`}Rk%Tna-7SSZ8@M5= zBvWU5%%xlnzs2DWRVFuU_*u}3OKg1VwAI>0+Daug=`6^_H8+)GAC;F%&SQgwjv$-T zMp-{^d06%77W9kFQV#4{bS#cpLdN<+XF(8>``>Hh|*h)%-{`|x#5ehJcUL_?$e}A%+ z2yH!unoWt&AGca3Nr}+bQ%ISVhzt7T+4B^%mBRnNHk5HbJk~T`3DSuGcqks`% zU$=YXN=d63VFQN3zP;VqwX4l+HkF$z*upkmvKk&0l@sO6z1W)03yQrQGq-&-#=WZ2 z4cOUcet=MZ*XWZGvO`~Xi^2BaaQDUxStjCJ$92GJc`POKPSw`VX2`8|UFJWFSM6c1 zq7IqDAT=yAP%8i_zbJp#9qyEk_iVBb5DL0X`}2PHO;MBbHzU^q)bc<|0M`nqTkgy) zusXR+G1jX}B8V)FlV?f?WoQH_?Z*Wo(%YM0F*4dX+v1skC@`uf4zUx*%`1aDn+1s& z3cDUYDkv?1uBsdS%>Bw*v3MR^0Za*<->KQ)e?HUNuLue`Pj@w|%ie4vi5Lodq0=4h z410&=WoEV^Oh6)V{Y#HC0!I)9Ug?C-idVhvYcqngO`eFOi_O6XI%(gaia|OH5eZzNx%hO}Fp-Vs%cop7i_khwG zikeiU*^E+vqGA)2)ucq`c5y^l8N1n*gaDzS3*;x%ExfZ09Y*7w@OZEVZ1OY8UHu9YX#Y-^1N!`>`_DWUneaY`jMo3V-* z3cC?LDw3I;QpjXR)~uER4r#-|x+t;r@NNC(Zbo70*0j2xTV+DMo%;2Ew#nw9s;mE7 zd!>4ZnW{Z?l0s`0%oTjU-R>7$%NAn8&bPpkU*lt{I(SCJMPXnGA{`>eW2)s?H?Tn6 zK(oBgHnSrT6(9_KnxoGv+kx3;c7RYpz1{1SGFxX`0J*t>&G+{AC#T)OMht~rkmB?O zGHC3<$!v>=pimx8JTRG)4@*Iy*<>0ZlwXK}5?;&R%50V;Vkqo_7H00fvhMwiVju-Z zjF3<)G;6i3+HnGCkD|~U$%H9JFDBzkDe&3sVFK3*a7t`0M21p>JL7PYcqmw9LCcQ* z2|&{j(jv-K)Em=GrNtVn1emHJUB#!b2g6Pg0->omX0z5FsuiGAEa&>T%ipng>t}O~ zJb(he-QPYsO`M9GN3e2r@!9N}Ip|uazu=Hi$)6YEh#T`h+cHaFK9xbil&nEP~Qv6y^1;{h`f5n9W_J)(UmL z&TW}dlfC1kkP8QR>9aL9jX(2wjftPDxG|u zt2suPZHklv8Ru0(=^{Ow@+pFfVg9f^gpR{375Rw+Oz=>ieY)Sz)ApWF_02i8FrDX-#yr&pkw*s_iV!( zkl^4GQbJ;H(r*uISJqicFj8e*of~!kKA}z+0nH}+01^163&L1T>7|p(9fR5U79_f^ zBuGl)ol(D6VtTftb7`+|%j6^WFi*WRoz9`zw8aCJcRlmCNHyknvW=i;TU#TB^1Z|< zNf^IDr@W=gys=Z`;uB6Q;3)h&!_zs(DY#~6#!%P|oEX8uZT)>RV4tpffHYfl$H3`% zloERzM}U_7+4l6@T){5TUq$tGpxK-Z0%-||0?#w>3&g2TBWc2A4250C4HdeH49$jT zS}m?RTMQzAwE~zDx~S<2XLHu0Xmw{j7hm;;V;J|Mdw_op4k~GXvn}Bs4ay(Uv{x%i zYQMb$xmq=v&5$V>MN$$=KX$P}-$n4haz|md84R4(U>C7}#_{kI2gB3(s^8v5g;L77 zJ$LgKc2+ilB;%mb%Ss~*_KlmHw=_hSCfEx10-U_o!3zH@}eBg&nBOhOtUi0o*Sibzgs0+(#G^cZxfo zvG|^%dMy4Z9&+5p3-Zeo3i8Wi1-U>O*4Xg8fhjUtky-z=Kn^t(0ttpYM+yKi2y2daj5F~5D0hSdvbsZLM8b3ZvCl+x8ugU1LVJtCWo{?LRb!CS-$O4vuQ`s&l(e{z>^YXa}*fhiEyA|1VN zJvPQ|X}U@_pq8qn1#(NbS=WoFqU#`aj?CuGKban7_99{W-PGyl+t)9u>+Q~~Huh&7 zRO!d-(0gS!KjVdn()UoU(TlE%$VSx54_2a`#()39CU^nMY^M(+(+M1vI>s2 z9v{-B1~RSBju2PgFP?RWudtzHtF}ngUT?Lx@xZ990FV)OAUfPb2z2D%a%7~IM^cyX zElgt5mrMvHtVcIuB9Hb7C~p00l)&${;X+D}1_#`Qd1PGS8V@Rl8A2Ir90`q(M9}YU zjmG=qKuN*ehqryHeH;@rK6&3o*qAc$CD__2+M4O9YU_A7@MC6B+^Q%jjoH_eUcVDb zbx|s|Q`!H{N-Cnb)q9HQmweK}W$IP;%}$pe|Fp`OaWiVWmB6?Q_aY|9EE1XC!A^gI zG+#4#8JDw`NC0t5_XQ7Lb6-?^UZ_CUhD0W|I)wxwxJ9_JLwJ&scZW_a5WE~%*ghP) zM8j21$6qnr$9~28tay%1uIvGxh5+0h3Y)P)TqMfSWe%j(y_S+WZm8{I8OvQMk%i%u zH(Ahc)_iSYdp@f=MijSNq8K$FKavon8O6+jH{xhxoC)_wHy|gpjx#MnVTpTkA8wvP zqhG8p6rr$vnpIr{!M(#nNOOwh)!ya^MLA$(5yAcXiC~2z9x)i(v~JJ> zg6$Gqa8iUd0PuQ^({f~5Ap~p$p9vL;0%&t#B7IDFJ$!`?8j5L@Q!pAxG$4rYq?|@P z^(fxPFRkWg1gGOwL5G91@^$xUfEhD78g1hHS0tielwLy5C}S`p{JtcNa>uw4Ah7-% zZr$r14upfxKs3(5ndp|PeP*1kNTT8mBOKUO<4hf@!n*fwCl}MPV92e> zhjQPY$A5)o5fc3^D~$wF%L?b;!urBKTsA!1r>t830^`3V#BtpSj;1A@F-hVqkmmtk z(k~UlQ#2O{6!$y<^b}?b zBjgJYw8CwTkg{t#|NZo^PE>*F?(sMhh(0AhDFPQ^da{5%n8K=@qgqCvoh746!2PzK z&7h?INSC=?XKs6gR$K48TMje+o*7UejN7A^$)H+Hcj0yrs2B}u}i_(3{C-Y94OsKKs)^0N{1s&)n}zMG3By!DvTwN z?gH=R>Fl9Pc3rAIKsYc^2)lMrm#|#;`O$REDN{!O@FL$}aA*Z%vE6&mMD*kg`mYKi zyUj-+U}_-|v6=G?JcOianTc0eYwpr>fdfi`7DvecoJ0}ylY4=iLIZovw82}7N_>hO z5@5G}k7QLm0F~k)XCbp1Tr?2OgqJVvGTU4!8-y9 zQ<;fnTzBc|mto9IfZoR;nFfV2!;h_G}(p(=+xHqa0X)<5lVC;vRix> z{t$m!N@_uoV(XTUgyrOU^O>ap)A&dzxQ)nBVaENss!PI|SfLa16_KWLrWD-egf9xu zJ!b>R8u@-5XOwn8r~j6@%vPYRpvMZ0GaH12yOePEJd%b&Ee7VWQW#Zgx;Y|cK--dt z2+du8hX2qusP`lL0~j&9Z$fuaSunw?9`78sx;ro6UiW+OXea})GMi=)P2FsoM#8=S z{LYhth~w%A5idA%10jSk=c;TX)J0yn{w6gsXT@fTM8c+gQ)P2aM=}h&8O|Bj-g?!F zu7-+|OuK2s^w-mxt*KPp%J+Al z6!%Ee?y#oO!dzv}5B$%}T$xJ3+%r~g<2AgdB=Bdw~_;9Ye~2)N(fMLs~Bm%XEW2-PJHB4>zC?Czw za9ojRfPi%}XlOK{jNQf7u3d6x2#p>yT)fd}0p9(VHyA~m%UI*sNK3i$aKTmW6b!|F zXi%(hZn{O)^*cON#%w)lZnmmI3h2Hj0x1GE7vF}Od`uJpeXk$Pn*;#|!>%4`<0*x7 zmz_DtH+v!=BnHFcxnHu)!iRdWO%))JdHvn<=TCg7g!H+}%gr<9<>pUQdEu~)*a_lg z8GD*H(00ET7(Oz|NI@pt+DpVDDYVLhsI4NgVZYVuAZA3@)JqqmGQr>6p?(?CUA!L& z6rVi8P52RS>6Vy!pEEB?52a;>|2WbC&&@qhXms@*B4#6%nT(BNh~UKVo!g8jLL3iq z7C+qUj_F9<=4WI=43S7p1{rGX8%#Al7&2Tn-kywcdzWv47!}E!4n%6@{FgGId+*L< zgx>Xjq>XK$S9p5p@<#ZO@|-38*UC2IN{1FT*9ihE;YSel#%=u=1*HNtuyHA{F=`!* zYLmSinEyBX{moJP4emry1v8yHUdRU6U8hv3z|H89lKv?pE=B_y|U`}-|kXM8fen2|~A^$?S-mS86T zPtBGkXrXW=>H97INN?s4$;I}hLuQh)2dw5biTP7o@!mC%mZIrYn`0W~bMMRr*w7th zu1aPm!4iN%&bKFfl9p+v?Md&%1Tfr*ne0(+CK765+Gk86HxOh1w6Ts-9B0Bv`WN6Xc#jk-* z@i;`0(v^CHoG88YSv$=dM49R?f7ap>8>4Q`MbAt8b8OY+KAzt!7>PG{p*GxDz$qi{ zu=>eT4=t=b^%OlzWC6~}ODu+V=2~S~IjXCU2XgOyEic62?UL~e zL&oI(V0grjG(^dhpUgKT(^a*>f+l^j40$BC;kmj?ac|m{>lMrkXw})GdP{bJ$=J$N z$+|mS_%g|PCOod+1fOOVRQVbR%5De=^l}luc+q{sPNb!oF=IN)(l+!l;<$I%VA7m{ z0#jLwlkP60wURJMy1*^rN)rN+FmJeZWBbs=4=AZl3gtfjx;K6e{`KN4u9?yzK;es^`tOc1j${)aM9yY9=c=~7PkBCgO_-!36&iU)kZrg zygSrGuzU+S?){@tPe~_`ZsBYCs}KU{;>I@e(+*nOa_<(8B=J?EbW&uBtE$43=4l-w z?2*6P`hE0=s))(<4k05?xv8*ogv*fbB02f@ zJR#2m>D8)dAtZ1b>J7RbQ#}0?Vv)yBf5KXa+hJo|y~WZWF8PA=yFwb9OTHH^j$WM% z8f^1NbB%>-CS8n6uPB zgXb2X13uM1OmUiVys(*Z&$t{ptrH;3FCB0q$X@z+KdTLu%)RR=RAk=%1gq(1urD`2 zR+Cm-xL%*3DD!6p#-2uV&XctUEMv2CW>ZLFnVV7?V1bC~UN$uzUrY}~$|V|V=x0v? zfjfgjG99w@?ZZLq)|Y?y$1hr1@50D5lSQw;zj15xA3e1ymM(ekphQF4mP*YiMHE{# z=p#U4fcW2W14l!2aeIg?5+rRQ838xc@h(jBfSqc|>n}2nPC*y-eRVgnhyJ3r zp_K8%!@m9oQ-~XU#c}U5ITG|8q51pYW1aW!qp|J3s7+gggO*R~GW0WUU8L_D>g=P>oeBh~qK+8L4_G1lF-s@Khr5z$Tr zg8+lRidLpdpR*I7M8EORvoTTF4G=|z7!FUE(alUVu^Z4PYL@ge;D{ReK2qR=I=D&! z297MKeMyHk(?xHlw6!Owe<~Q{ijRuh6uL-P%6TG7j9QU4D2xF8iL?a4z2|HH5iR-% zTVGi)RC~CWqZY+*a1sGSV}#m3eM$~F=omEj{vmeuV|pu*-YFnHM#VRg8ZQRiNN>ib zQqD{sRo^=L3gtc!dStEXUp$&gEP#f2ahs^?sHDU*4s;yiMC1X)EeYAjQk9RWtZ)B# zvo)bgEgDF%!`q;vK=8v`g>q~61|NY2u*}sis9ZD zeYzoQ-%~wWD{$K$rER&VJ2=O~yg+rr7U!grZ$;{~O!Vo6vYIVJ#({`irqaoE2@bb-al=y9SN%$h91-~? z`VhJ%ieUykV;h4LQBh}u=03b5e`|%-u+|m3!@+)Whd6kLIIzYdv(&|YS1Kn6j(dk_ z@&dQQpS0Q|d2z?mXfUodr+Z~Yoh@_p#Ta2YBf$o18ojs}wT2Pg9QAyX)3 zhYeO}>3b4@+`Me72$VnICQDMDPeL5+#7{~clSA9sJ z+}fQ!4%Cw}Ks?)gb{Ih zTH%{iteLEnV^}Gpx@%$og7sP6snRF1F|rFg`yKU&%)n-*m<}wOdc8?7u%_;J(o=Az zQ0LywN*~+qWE(d>=o$&4Vt~{L}iCFJ>_+=lCjP#q)LksysKS<=GN~J ziGnf^aLW)=LgM1@%5Py-NX~mLoP$pAw>Cfb1I68`2X!Cd;3LqW zqzvKgJI{jn6bzvHl+L@1(VQ*{1#%xgqsLmX7LJO0{%I8s8r`L>ANo(kmqjF~TuyNW zyE+^jdgHdK5CV+*mGo0TV7k82yRE#mKp@I;+V|tvY&49-6+(6SqxkCi2$hS`IXwG2 zUFjNJUP%Bq+uQ!8ckFN@7WS6$FE$DfdI$X4CWJOGRLL@>h9Gk=lF-yr z*HJ{+Tm#9qgrZ2GQxHA+H;Q^*aN?Q+5Aj7I7F z8&8Jg)XoqEkK|S&Nx@d3h6l2(eaYnY9b;b-K=&yk{dCz~u2s=H+M~~~@fu4_;7*UL zmczV?s{?r-z?CoEB*^%{9xmC>b)X;NBA(@4)3&q78N5#ztc*f99qJMxiW5Bzy$tvzV4YK1yr zfvlW=20XF`o`y=8C}YVy*zHMW=Xzt5*_kE14j6%c_$0DG{l~{tbK1_`6>u@a^9MTL!4m3`3(K_2UQ3p1VG653gB^g zIzDZDRj*v|CO|KMOvC2ML{xbbU`2h&H$ryWu8(gZN5bfNCSa}t*9&d+U~UB^D-k#$ zc@rCKF0u9F4H|+^yEgWeQSV%qfWdR0-{zMs=;WWaf%NPh5u!sTEK;;DIvPxdA$vd) z251J5?oo@@zSQqEqR8Y%HepR6UF&;(o~o_v75*EkqKqAs=%?mTfGzlUhAnIM8X5d@ z2;*QZAlo>2;(o)J?_SAp=w~D(egBOw@J$_oa~96s+lDzF8tLTu7Kq(>o^c} zbZ}^5T&7>i!9OAyxI|NPB$0^;;SHul{xvx6#h^bu zDO#NAoz9B)+Q`wX*XN^kJod4FC`#9-q1%fGcx>~bXpfueSCs1zvX-NLyXRQ3po!>d^ zPq1&DSZW#jmc(@IHOGkLu4&50y^#9|f3mpq``?STpn9LQ7_hlA)*?e#Y}<}+>-%Vt z@FI^O$D~Vrdp21SZxItqa*zflhKHs5cA3SHa{lCDE6!}AKRqKp>rc>N;57^I>63@W zAufFKqfel_80ePQl#Dl^hSIDlN|A67W>JE6Jy{Lpu;J=quV$p3@dl6YsRE){p3?Ry zrJS{fLx1lCU)mWC=+qMd9~jWuq}R+gIm1XDDo#@qYEZILs_VI(;nCsPZlRhS-*YP+ zYev96kw3%>p@%PUku<$nxVSTVB?oooqpJp6W3=^zQjjUzLj1(vQ?@gBRyqO1&1r6$ z%vBKB-5(?3gI7;2iOdd071nemfpNdQi#M>aZq40{cC0_4td z1}zWnWkW-^Zfbc{w>@CZm5 zqxt+qs&yO%zWa)jPs9VQmGLN#nf81@sjhjJDMgDa3&a^=xXc`pX9QORio<$ODQY`e zhN}r5W?~vPGD$MWuwgObFM$g)<%o%2PGf?NFYU^0(4|2YEI~9gi=<-MNzjq-UuNtx z-iixx@OWz~kMtH-Yw#L30XWGB87bp-P2ObtL<(1BIz!I=vC<1UoaL||SoHfqs@~g< z7qzZv*Tj4V|JSHMCJLBSfifgwdi+r=5JU=~HpDYh`?})EY)Baqp-!P6Xn_2h|J9U{ zYY+<-0HbaR7#=Y)0{_s{!-I8{A%YT?$fU;YvEDWw87)7U(V$F64fUze?&>$bpn*`u zU3H}jNvJtM(71~-gHx>1$;?3&)2+c}AUf72U03n=ODIy`orle+WX9dhsH86TDXP1u zNx&2m84rXO2>3T6VDo8cNq-n7p3VMv?u-|;i+Xy;+;@? zra|ZUQZqsqeB@-m#tNRyj8q`q>is|^7L@q4A1!j=XkK-W5CH4#P`w8#`k;EA#&sH$ zOs^TWV+gnp9ta18=YR@AP*n)!0Gg$vs8BzH4VVh;t}1_ZHbBRb9vdPl22U%M+sVeU z0_nbdB2)^cQhYKPeucd@)5d>wAAyoHan0bWgx-?Z^Op&nfeiO2aty)#uL*R?nGp$892B2l+oj|{Hdo(g}QpXM>G_4#~LqjcVhg#Y88Jtk)P3ki2E3BmG>d$Dj7k+YkvF{J?Vw0-~K)xx&DI73{>8?d}OHYVOdPH*Blcyv5!ztxKo9u_GA}AxemFJ+bJ$RGezq{ngBQ}iZ zaB9y_GBM{c@vGEJfNohr&1u&?Z4r?!B-ZF;O4gQWS43ZiEvefTzlFzE1vxVa@cG(K z#^z;QYSBEO!2$!87W9|~jr)lHauQDe14T-T(YxW$#}(h&r#@MEWDH^hh61GfjWR+L zLO+(7L5Ytz?MC97JQA|x`QclmmYd80h~Y+O1Qjrr+ow1HSrQhC2dEb-_a$L&3s51qRAv;;6?D0`>jDVDG8Wg6Ls_xW+OizSswLGbc<@4`bW3!<^!B zh~n$Mzdp-@^YoBRu7PteX8)p{(ZUSz5Wu-XD+aQP^euPa6L}wxikNYcb^9q9KVE3O z0@Tj_2JTtiW$0R5ckwQ`{En{b*etzO`Z?Dc)dTbyJ&*L}cLmF>5?O*ztq;?rML}~F zjm#U^d_VU$b^6Gl6Lo{?R){)%4@ZGPXen%*iSb^GP727 znJ~Fw?33Vl668+tqP>J)BDa3OOCF2O)oQRU)5d{H0_7Iz+jPLz^yf^Ah?;IS*qA9m z4Lyc)q!Y|TN|)w{Fm}*JRxLe}UdkYCus$nBiFAtSuAsCr7g*>NkBCyrMBuD;l4h0# z9nzXYx5`t1e{xhY!q71jjsO`UN54sz~qqTXtzXIl#1+|u9ow3afsidvc z(^IH=6J55^*Gd~;b34L=NLW|{A;Cd2j zx|)=CTpj_+5QoZTTn{h-2O8u$dXb)xzCbzG#EMG z*wPUsxA6@E!j!O8aBP$6#mageLw_YPZ!j5JG zo&6DJCn&5%Qj_*pr@L#WT*gpFpP1MpJxi}N5)fvBKUpkS3wa-3wOO3Lf3SlGlbY9;mGxShtJI~>RY-Tuvr|0eBLBth zNKR(6w1kI>tVCpWp-f;YK%Lp3>uTd$`B#K6b0Z?h%2P)1QQ zwpjuMc;o>k3aunOj=LJt*ho=GF$(_`sKR~0Av<;Zp!>S!q%#vH!crzLi`+m{-a~Ea zL<@|Rp^?O@wJ>fR75E}t>jrLQoalLb#I^EFSCX(v;B*`t*Jfxx@E$j%tG~R}idMrV5^0k2Fy{P`qK#z9f$& z;+c#+L|`#fsu!Iy@u%$8fPDTku6yq;Kh8*>BmU~?`OA2`v|djbvS!H+d4?;UTxDAq z7%Jn^o<+YbtjS}ZypWIsJw&eKD_R7Q;%M|Cqx?|=v2jZygwoS8s@u2^66|&eSM&pB z19~F+D6pZsz0}@h^u%u*Lwhwk6+F@t{V?6J!XMXqUheo(HfZP(~3t`#A?~LplEPK+>*VdVa>53m-z^>jOfs2GH9bE}kDzxb!353fB zhjdbG*vLpiH8N?cBM`A@w-^2@o}+X>ivTX}E8HupKN!oz3X~=;G9qa_kTX#3+6|!J zpwF;Rkz~=wvFz8|bP{3u*l1a)TzX^}7aN!3r>iE1xZyH(6%9z;DH}f(M zk?}b0N57Z6r4e1$S-2g$1!=3%ZS{vIyjIb45 zG}mD>P{@NIua5DhQXsKEN9!ok?(AI4+yqql!JUOMR7xJhoqyDQP0lJoFA}ugg*H<; zqkz$6rYl>N-4{s&Ecfx<1X_w6)UN33DGM0ga;4^s^Om-}!7Zzdctq^xQg(ba@FACl zU^{x9!1y9stBuMHJYP}v7lUQZPUfxnfN-N437rm36+y6*7wbwzBZM?xjb+Z>4Y)0q zH#uVH6$~UEP)%o4Bi0ZU#K|%BE6Pf`T?JQ-=OL0Gp*fwyTbX3Mo4`B92Q^+hczpzx zuuM9ja-|R^Q2eHN&PzMqyxHR?Ghi=ugsNJSQPr6$LzsDX zJzz9sPvPBq!r3!;`=mBt%8X;V?r$dI82QMl5`TxD-{wc|g2vH`a98z*xVReNkXc13 z(wJ6l`mdQ%kEX8@p?y}fOW1fFwRpzlN(-}UHaV7tgJaAe>u{C>Msy#9&huNgc({D0 zpl^ByVSdF~zE$gzG~z^CmS?zrj_qvVL`A?_aiK$*m6QZw6*Hp{aUGf#x`~kP0t_gd=Ua^d3-yEHaM~IH&^RIb)Bng%#J7 zFpq78Y7;L|IJZCv|ZX4`8ho+=kl}rBHmj5r^XetGlGuELAU61H4 zdFpgA3L32Y3-r3o1Fj=rLYTgvk_V3%ctFG%6mmQaCkF>-%Y#P@JUnFzDGw_;7Io{@ zNk?C?+{!&!1=GU*Y9F^ccDq94Wfy-p0NO=^5V;6EK^XYZ$~qzu_JRAUqisQ?}oatM<`&q6A$$Vn%K0d$Ms`$H^s zNLF4M99ESfhPkZ3G7sb>4OZ!P7x#XRxm_r~$;zYKQ8l4Td-%7mpsJ4&mds<8l3o zNCV+l38!FickySsR${Rdg1zktULwGbvo=oHV6m#DTt#&ok8o$X^JviNK5QSRtXw2k zC_YMe*3^+o<3*WWj!ydu6JU)GwHe9$@19Ry^e7J$|U`8?9%{LM=S>o)T;jeXoc)bwV#h&yz@9CsG`& zA))f2ZmoJXxC2!oI|UY5K93*Xr!Z6?nTndt*#V|{EgvT_X9mnIk{L+}V%6Ml(Ql?& zvXjiM3ZPph!Vh3AQ{t>xb49hrL?CoGy#cEJz(R64xF-yhk*jG0k)Y zE_TKpy=YX+OM{FOQo2zaPesTDD$h#|E`p%X@77+k@>Mc+@!~O6%QC)V#%YMT6k$6{ z*}R%PRz`In-KV2cszMJf;Ph3kju9whh*r{~9c7isMABl6R4$q7Icib@gwWit?(!Km z)hr$rUw6l^yWInRpoFv84B1x92CvVZQ7}Cq= z9oJGmQD$P$8?wk}(c9FXvO-fOHWH+Tc6T}ag2!aZBJK}hhXXUkYdp_PWs3td_yxT& zD@bTE*n`8}9ZFcly9_w4?oY5z)!!Qae)_RWIj&}a znQ<2JOCxwC<$}Vqq`DXiV-_1!4{SJkDFwGc;a|`zaHK*G!d1fyRvRkdNk1^moQY=h z5Yd7bNVt!l;7y zb>SZ?ByqiOSlREBicJyLe?K!TfJs`SokhpAC&nOe~Q=S(@Q(sGxG zOMG7Cbj@%|FFKj=d~|l4F}7R!>l4sONAhj#-0XFo%q^hkMIy{oxvs-VlA+eywaNdW zGO{7>Q&0g?J(XpC%uhoN);Df&^vA6?ePF@6q$NbR!XLnd$SD~6W%FHqY0nH^riao0 z4NblM3P|p^_w?U-H5L2O+qfPGPpY_mc-ZgxG;&PG)c}L)%&0IA``37N1W5|)n|eo*{6eHYGaH^=G7}qtFIcPEs`r_|*YQG1LEV))dHM49^VmTQ z=n&58L?$#5HNF1YM+9`2?s;(Bw!yp6Lw3elG1kMcT6j};NO{CYLoz!gHP`%}tm>k6 zBBDj&G8{NtpcW+iE7&JcQ7mi{2YpblUFaJcn981Y8aDPvO!cWJnp)*WG#VaB1wcCv z4UWGM4nxUoNM#cT1Z_&5^U9iHxlSTqFv}YS}cQBfz=! zd-|CuBGEt(FT|!spqb!K6lh)OE5UQ6@cumgo}*-jRHk>wky1FyqVcIJv?;-*Npx+4 zuVqS-2@d4=b89Cv>y?h*;Sr;#Qo`#i1EP!-6==Zgc@K$lxG{wY5>Iu^2WrLU#gcDe z<7&uzAgok;>y-bbSP>N0KeV{yDasTwvTk6>>PUJd`-T-$Ve+-6B{Qtkg=^t_AMdgG z4EoDbT?KV`Y)H2G+kkHin{H-8$5ExGI3i_SW`apkA>(eL^q^tH1YP~dP$S*@aANO^ zWI~3KiSYnOPq<}<&?8pl1E^7$!X;?f_CO6sDMSq{EJPNpa%Fs>NIhvBG~9OxHvtzS zLBD8$0e%(O2)mK(t)(PbrepFEItF8LI2?`l$F^G;lN-AwX)H8RsJ@@Zo z@Q_;}*WC0p<5z_SHv))C6t+PMa))eq1OfFDyv>n^Lg}x0CfL4b%vESNoxBJ1ClRRU z^y2{AE}B~6>e~6W5)h%;V~vfowcZX#Kz9w>Whw^> zigE-3LrjNhav%2^&R=3l@K+-W;UXrA9~fz5&hlyxaHgZWe@xGA=+dBt*!Bl% z`a-AQ(JMQWT>C2qp6ro}NtXh!diW~Ws02orVrWJh&NIbUrgMHA0r&Wa7r6F2z&T(W z^*2EIfAs!m@%#T;{Ez?m_x}y)?jsxbe-^_wie6)iCZ$T-~=JXvRb$}a)`o;E$zaJr~?4bCD3avv{{iEXc=p|I(&l6;Ps&mDIzmM7^y$<%6 zTr2@~xM&eEB0S09*Q2^mCHpkM$`gBzHS&%S(1iri?cpeJoq3~zb%;u65;;B2#%Pb7)gdz$) zJlxqtDI92-sv(s@Qarcx4OhSMX)L@LF-0FMpsUKM{m(4ZN;7SqkW2t^Np&>BgUq}H zQGPRmVX@!?Ebj7dXRCLB*kuoXf9YOoraZWEpjWMTJD9K$#eH}`{zYm*S1P~}I6AV~qTf@@!V+qbiKlklZzLm*Mw_@7YTZ($Ikw&gVMXQ@!ZV-P z$9L$5mhsHSO(irfCM{rck5$SYz%P&wF(&8vU!?~g8yF+sEOuuE4EUNf4mAEz8zj%2 z=G{f#2>ww^&mzoxZ=i$0@{)*-Mh43LS0+zq`lHXZ#%S??!Vb6nv+wwvxVv}osy7_) z^C*SBSiyR84lI^^-^{qG?1L2=@Ap6U5N;XV04tsH>+&6iL+O=CyoqCnxxqx}|G4iD z8)~rJhsirTQk z@hahZEDs!N*@E3fVv6lzCiE$pgVskCB#Ig{l3PLdD2$WVMw{F9MP*IzGCpVQ-IPtQ z;<+oKUM(NKnH}#UlU3`RDt_jKMGgwMr5{3~r673P&eq3GjQPqg4(SH3w?;?%2!NI@ zHf9P?sp15K$1tq`qs!4-m_0^-nYefqV6A!pNK^xmF}O#QauuJvD+dMLq|v73T8@0nn0crYnGkz`sJ8hRlIkCXS0xIoL2Z!#Jm zl_y_jPn5OD(q#|me)T<~5wusO^?;Ie@gjiGXhh#r@Kgk=4+rrW6mMhph+ggS`o^qmo*Ckqe5o zcbQo=z=|xoa?XC?4QNwAvdSDGeHJUb&??hh?3)bF9wsbR2suI zlQe;9X_sQKp+^nn6RkTXq|oL^_i6@B7mf=|qWry%G=sL2~O)B-(}0WB3rm zer-2IB3oPS!pcQ~-6kTT0+9IEPJ8{@bQnnJRrvrF;C-SMI3+0<%CgX?{@v5Oj5 zxBkuZCq8hJ&ZPz7p>Fmz@Mq8zBk6}OfkBk!`ID5$GVR3q@yhma*lz3stD2Pe@fJ)+ z?Lr`8O>qPBKaIdBR9>8CaN2Pg9n0uNj(NsWzC}1tl^+qd?^^r@j!_-&5lo2)|CQr_ z6Y|eE3cbRjk+Sh8NkpvcK!T=ZWO#>I@@)?435QpJ6nu{RP?mm^Dd3+FPyFjxC)JOqt%M$5t*RE( z+M-M>#qZ`kthYt}uYl!N1KnghcU@`Xpo|>@RIH)scKN1VCW0*fM8vW5YjEBC{Xhfj z7EenNLh2bb*q&g^5z^_DKB9K^-P9}L8#sxroxPsl#T$*u?9$bSp{4EFsDxLdy8ycS zY`vkCQG6LlM2T>kIM#JJfkEs&{*^8+P@N%8_J;M@`H!X_xoYpUiVD~M4=CE<5;mz4 ze`FH%&+Sg=(yZxg#`%iVrN(CvB)Go(kLWS5+rO~aJqT)@s!ZlOs7MwKrAsM-Tl=<) zGGe6jsYuuG8~L=hYDy;iC-$t8=TyaX*8}x1^{}xHB~(^o6Dmbvm-Plqzr8%QmF{wnWLk7v?lyVBTdym;caZD=g!qrxa zhmkal#hmBO%ArAkAHu^{$?yPEG3V)Vzt0mk^2}z};M#E}BzK7kux=$kB6pp7f{;nq z7G3)7^r@=9=RW-8-nq|>frR-m<}KS`WWh4?L4ut7ZU5X$ir|WG1&@ywk|MGX+dDDG z2YM+)k!dkqa|=LjdXWgba(K=MblXQT+L@*y2x?6&Y0xmE3qcUtKk^PJ$g55DD(=y(F> z4ikTBt?!+)($9hVXoTAMMy8p4qyFAcC2ftVr2j;pF7ExBx5v8Z%aon7z#j3FK0%<{bM{5rcnvGxVTRqIUpXx(U zbNpKgSuE<-=mmnc0Ue`t;YGK7So2_1#`hDYr=<`Zc26pTxC`ImkGPaAzUcPxqUK;S zM1aMJtwA(4M!yXT3NHe*P*8MZ<3(@pg*@CnCHpcHj*AOrDf_Y()Lr{amvj&W&qqC0qtYKpa(pCP~XtVY!vEd8=Wt=%6OE>Pl9JFw9^+IEDrq@l@^C6y4*xuv-C7uxDN+Hvr-Fx3XfBuB) zM&Aa>8hdw%oBG5rA0EYVUMh|Tq1C#$U_G#VmpGE7F9dvjCBtN&e3jdEdV5GWoi3+G z^sCWVH*TPM+-UQVb5=J8!@V1~Zs-tA<*5$ay-#f2WvWvo^&T_EdBT*KDV*2tjv5pU znabQWe0QA~1Z&L3A(9nwjL>QA?^)f=EC7nYBPik(zHx^TZ@3c)Ik6!qDbsLMcb(M85`^WK1fWT?6ITXasoM zF&SYuK=8b7gS{=D+gk?*_Q|{k^Ya*ML5SMD%fuZVgaau-6DCk<&>I}|a39m$>?yGB zGW8cegQu73*hOlCj5^+%)E)XXT4yPrILQ&O!xZE2P$;Dwu#Li{Gu-eS)t`zsun)DO zsDQc+62wzaD`kSG+DNBZ?SPzOs#Sr7lV>$^?Cstk|IzARX7{NRi`vMH;@0#mBVx)@ zs*N(+I6s?o{6eo&n>C)%?-;+U&&x^>-G`7ZS%;3i7e+b4yG5^qKpEb6@d@E?;csI& zKBK{_x3s0W47GIU>Fg9`>Zm&lDRw%0GDXCX?@weG4?afb+0TbVPHPw&jJIh^WV+I1 zsL;j_6}5J6-@p5S`|^uYX`Ia7BzB?hYy~*=C2P+2cJY|bnMCw@yYR{>qIU&mg{l$p5C++jJ>a6C;XepA?N<8irN+^nTc8{%0UE%-F{N)t_bHNI{E2G6p2X{;*04D;RCpgosuR9w*DkW2hu7 z3=x4UH6;?t_}$vPl@cKccSDl90%*~e8l<3|%spDugc~vf>*3dGbgaBH)=pcBH%g!TIuJ?o`q!fkOjCkv!! zyHcNA*+2-?7@-)ELI&1dM;%5bdRJ(s?y}*DFZ-N5Pi0uc(>*FrW>Y|~r*iUUFq_d9n343k<-G(2B3i)N~ zcN`fb^vnrQ>~$RU1jT)72mCW!eC8WYysMNechBQt@kU?*i*>jol+M763nHw*bHT-; z5;G|p248zh9>JaT;t}W{PR9O}t9B>fAm&+b0cvpF#rs6=8K0@8Ch}VEfNm>b9?B){ zDaFS#*YVUEc_0?jjIZ$Mq} z+;1Zbz7ezV6>pJ=WHG|agrE#zyjS4~!?W9a(?T+m&78`3mQ7eoVcj35afouVZ;DT7 zQpoQ;r+jG2A!oe&kke0+ zAzx!Ta=Ce0PLXV3CO{^uWt!v+mirY~k|*PGk1AqO@xRem#q-{w%tVx$-I2#RML6PV zws40X&x+s>!Z33J;Z*S4FCU;pHAN@c5-<_kzRM3|odl6f(%iCg0=XD0_kMh4{7&jE za|s!?OzS){zST%>6sF5#CPQr6&{!~cS?(#;b^oFepCDNVZ;aJg#*D`{mAXZ97w_-~ zxGuk7HP36)w~az@lK`@FT=U@?{FDcbycczkqNvUhAKp#Ww<-&cLh{80&0^%0g@9?o+>Zj;8Qjc*t66pi&p-oUdfqok- zdOK+}rt&eP0&k&HEjsassq&*%C1Ev}c~38f?9;*S{voD*DaG>y^S*-TK9NWseetlj z10QU#OJylMJzUGyB3UFIato3BgxxA#f2E|;9uJW<0-4?VwBe|ObQhm^LPbIdT!?Qn z>b8e?E0s2z#u}c$H%Xx!MNNCVM`W61_sB0wKVxbIZDymIj1a??Waf#jQGEh6F<5Tn znL@Ka^0&cu0TSrDsDB@M6ZeASes^C8#VMdC3B@N5x_j-NqXKCy*yJ`5yXmc*ggE4zEn#L*(jsb%$2R2(%%8nBLt?vWO9PlpGk z+t`_?YK)9fDvqXEGbKWyi7#Ii$Q2zAb_Q^s$o@W?9MYMlpLqC*1Wju7F0(8sc{(T2 z0k48lO-p<#0+mu8LM~N4m}vN>>Q1Jb*Jz;A)`63VSM^pGdV~1tOiC_uc&y#+4Lpei z!p%K~W#^0Nko!vS5aoH18-}bbnjOZZXIvaVm9()ZqknoV?8Xl$)D^l%Rnd5r)gSuB zmxlMP-l46D1I%feP@#V)$12BnXzMkUpASphshfs2X|7Vzr)R$EyP&@T9n&Qt>JfYL9K$mr}J8dJelNm7&S3$ z*2md-d6CVNp_SPbs!yVTnrB7s_URKP4(8ELc?nlh>u6^cZ8tdR^vyF!(oApF|Qj*NE_0|6+8G&z+0 zy>`|jy6X>w20ZCb?^UmZ8pay4qS0Md77lTYj63yq(q!Va4R{EU?y@rR`o#ccufrE$ zV1XE@%Pq@HSaAxeVeGU*xJ9CsE#iD%Pm|697E~bygmXO?aDLzhHEPsOuDHe!$4)F9U zYbu@n;clObIqhghOO$k74iK@BLb{a)@<}>)i}=;cTB?~4vQm|@8<=2TO;RZ63I0q; zT|j4%hrNRse={@j40%gQq{dG__c>&2{AzhjGNgYl9#aw~FS?p6JB7ucU5vaJ@FSIq zQ9n<`_->t!P*M$w6&ex#`Rr6s;oZjfAcT~Eltsjmx~^hSz+kpSoADy!&Y1JM?4I@U znepVo-G_Hf_6pIZn}75)Fr}68`CXYg%I=Y}(ners!(0OHu36^jD_@*hoJMb!sf-4_ zYhk!)YT;pmq;=VMtq0C4JzWWx9vqn>~{G-fA~-T zK>x!QZm>uDN<3J1Q1b9I$Boewp0dF)pm2-jZ@#a`c9Yg%BD=+xa1J`7Eu`$?&E#~r z8u*U5W`nz=zCyS5L?LmcOpvTAymi(uXplDWYjNme!9ly)Wn6&r3d|=3wSaEpLGbeI z#l408;9yUUP1^0_H#cag^CCjHmHP<3!2e1euS<9|1GbF=7E_8uWgHD!@c6-z@)Mo) zsIK*O_XyXNi>bw;zAA8RgPUgIkmw?60V3YX+shV0(%5C%2v=t7A`z}oOt22g{W>{v zzTF8IsC{VRiSBEm4{Q7IP4UtsIX^h1rf00vL22L{Bc$#t$5o-+>ciW2|5C0fwM18| zcWMiLW;Tebd?5<9kIjncgT-@~9^xDFejgGYf85Q}50rcT?ZF$AVA?*ivo0fXrR*Ck z%@oPK^ED&V3^O$R&d~_9!3>*DN&(#>Q+y~DFL()3!nFmhGK)aAe*w&15?xVZ^j}nv zF&)gr|Fg6d%bkDdQ6bOEB}yuQR81S0Opjs*&l6Ngx9sUAQe6z>p*NzAGiKm2IX(G-3utcs;dhBJqmJx%tlxfO9U&n1_QQvF zzp*-k&+EE$VjW5F+yaqHx)tVl-Ew`>Ij&gH2^pkRC+0D52U~PK$qZOVC89?reqNXY z@GyJcx#IUI)_EKw~GT3LnpHaB(Yu2J*K~vmPc~GdXZ^7A_{kwwVk6~Dp=6=r8>x5&0j`8#nIsCRD1YtGDy%3o!zqMJVbd~_ zyQTymZ~qN9EsJM*9Ktd@x8EMVEM+ifdKL`}wbHIJ0`x|aJ8)U(GwLH17vvD$0O=au zs^Jzt5+(6zi?iX4SThq+#mdbC?Gl!|dKb~{0^QOt@EUK(6@%wAM&fv#)@1U0wAcFV zjRkQ_4+%7N+%YfTRI}4FTZ5YO-T>i{0kS{f%ZM}`AKw1!)|1=Mzr#u1K3;C7&;p6| ziod{z`Ure1i--smx%9eL=F(TRK$X*xX~@UbWH^V0s4HuR_t?xMY2!y%+Pk%f{10eV zs3?yfFUwE09GM}LiB#xdV#7zV+;_A2b|PT8w~W3vj^MZA<`SUU$Z>wnrY zYM;u`;Az&)JQ8}^oRn`gBV%8Z#j$+&8nN6)vJ;ITLxcby7?_-j)URE!?aUAn7_JY5IWUwOT!2PSIAt%2TC+dwSE z!EU9J$W5ZeZ>p(g8Br$T4h?*y^aRWOiE` z{T}$D8`HHyXdwRp;5n<{!PMb1xs@&JHLsZ~`zROD!L>uA{k8C4Gwuy+9Uao5*`|k4 z>K4p zh!0SesD02Kpqy!%oVBsvd&4IPl&)1fvYAk-&MbNlVbbYg0>4tSHK1zxrMtfH zyc-y|PV-+dHCctIEqZFG`_Q$?tr_7@B_=5H1n51fiS``0DZyn=(7%6R`j@e$Q%Ne0 zyGR}Mf29Ofo}<503W}k35_x(UAt!&_O37*eUXS)rm)S-WPSQWc5rY1&l;DO46sLex z`OAA%rkj~ixlW@LBUPUgs(b&QydxrSh|p#6hpc8O`2*^S`l?Y&-KmVYy_3UODSd^( zTFKv~mgBrIZB0glheUj{lnhcm>njLegdg9fNOyb6L)4jdSu{dX_a-(yC9@Nq22Bud;oI-; zYtdrTa%P=9t5dV?QRwYlWL53sJ{eB){fDdvqgOkqrb*{JNHjDPI};#@y`k1#*DaD; zK+K0Qi~Bbo%UU2m;JB9|lrdZxLW1K~zM-S`$A@&C2EH{9&f>n18o=AKXAdVMB{**7 zG2sQ@l}TOMAK{{Hi-MAl-vV5Lsi^?hNjK-(fuA;>nmO15Kcu<^ zJ;oeaj7`Abhr(Zo@*$f~?hHyQi!};=neGpU*~5YeaDKkp4=Xg>3U=glQ_(-S&gy=x z!Wq3&gNrkkrv_y%OF&b23h3@4Jy1c#(d9~E!89SOt0f@yQ7l6Z(n?A=^$bl3D}7XI zjJ%N%vILM;LgntjwdLloXEbD0Do8g~%DmmYBvLD|@**t6`8|-%`z1883~!FM)I&_I`SUXx zJ*E&mFt-He-W;VKOob-|4XCs>2XXAMofS`(g6?zYxpoyYQmliJ@wnCUw1<0KuT};p z!nh6EPd&ozz!AavQ$BJN&f!O8WyrX}G1Aw4)7|0pE_mP??(Qcu7bP_4sDxwNp3o9L9qxp&PPM6lN5YK*u>{8nZmKgY z_%U6|ZuvO8S@koC5V>`&4C%gjCK*sHPxzHx+>?QHJ;{P^g`%DSl|I6M3g4b2euYXm z-TZ?5O}dcL3T7e|NhSlPx>277=&t^NqWr`bojrn9k=h~Q znS;X6)lfG-1##yU4*i;^Z;%Y!v-w+@omoA&K)840zW}~Oz_Phlt$~pZ>3`A~j zCWBRllX9hgb^t#q*sw|rNSGX@M0z`R0my9HV+0=v3=l`n;JHulQo1+InR{A6QQq%F zisER5BwFkpp9^hBWKQ9X5HgaModuRuoR|3Q)Bxe$e=O(d_w92BNkNjug9AK|ShpfK z2p>>e$kX>c1#*jz9^pYQAs<9wj)3JZ6Dj?Z-x%ZC{Y3Gta%GH693&E}99nZ(jPaW>Rn9#A;93aVYyvNfft zh#GxpMA*cWm1d!TjNu9;0fmFxgnc(sbNI5rLynWPm4r?*NvP$>=4dtu9FE4FbR|lW z+|};@NQ)5S|DHy{KPEG_q*UdTblztYH=}S%`2ZHpUAc#CAi4_T70RSXBpz89?6_un zEP8|$JxPr#A+g%>kcuX;cozm+?R}Wn5yrrb>anX3_FOWagH}Y)t=u_b-yj}4)ufFF zm30xpP+70BYvuZ3G&twwhgLS34bIeIQ5<(osEj^Cz0&@~*HjP6a0!JhXgXrNS`r$g zp)-BUY%gilpZgLao6Gf_S5NnN%@G~#+%*iqWLv6-o<3ZQL6&m)riAf$PE z0-Um|=_@=_SG9d>G}%Xjq&?coC}33oiknq|bQd3c2B<mA$6_@(T(|g`uNKCKG>8ojDpAOq zrapAPMMVVZ^e5H&2A-Kh>CjIHcI%X&MhgQTC{t>fe%BNt<)*qgWnM9eYADpF^CGZ# zvp#YXY~jVg$2Kl-?F|Q$(z=n+h+{ZN0NsVJBRYB?#{zqqKK)SR@2x+c(OA>~yI(ZyV@?#!oxkI8A&y^0Vz}jxcTC5l);2=fUAQ4KWvp#)a6Y7nC3^}b znSw8u_?dR$Y5VEQBX(5*TX5xhlR(}U4*bnH|uU7a^xQMH#1zExQ@&kkN z3~e0a;?)3hjtw6TTt0;<38)0>mJt;sD&7Sr<^4#TN`VMkgm={b<0}|A!%Ktu6be}7 zg#(fmcy~R-D%-*0`_Uo}bP^*GWLG4UG zx$;bfcOP=7i@Z5cx%h;hLHIPC?(eJM_0F4L; z-fIaIv2Gx@R;WUJzfvgXEB?X3!BMLw zqUfTh3+6u4zT$#F_R@rgW&U6NxHO762idww`gBIT(- z+25gGYmjWuJ|uebu~KUd+dZBiVoY%q78VJk2+vO3feZon-czCOO*u~VpcHB_NgbjW z5kg6n3XM|2=`23E7g0uaD^I(--62K1if@^Y(Mi2Z6_%NrP|(SBavHk3@=Tv|5)Dg( zLLY>YEH|%4h8~@G5bLqsr7~k7Msz7*i*6ps(qKj{6RtdF^+8eE2q@pf3ou?SZIJs|BfpwRD03~*7 zMIa+8mG|FBLw*wk$E^+rBjj+Q$X`FY3Kh;8BtR=_NoVpj+%E&0k&oy`1fJgpy4_X& zVft7S$q_=xH*RkFn{?b7-V#(}zxSh0kcTLKQ5t|uepE1+H>w8-I2E6guCY28?qQ+) zkrcC9alS!(C)C>FN^cc3xA8a-u;u1|F|hLb{d9TB@#*MD&&7~Ze_akGz;+?eK^5QQ z@ki*1WVX!@@O%mGQy*Fyx2Dqwb371H0C$~lm)z}2#c))5_q6>*lLexMWPUmbF|#F; z1yx5)A>1XRCr>fyF_-Vwq9=uv)>5RW!7=|J=@|$JhWoGFIi$vRalT3q_P|QX3+lHu z4)_`SF82;z^@f83id`0ep$97I9dVkjOJEAh3{SD!-na73sB4V`5)ik+Z29A534uv1 zj`N^ad7JW&GmR@ZcSY&eGCwMYJF;?y40}U;yFk?B&V(7-%=vpw$Nqob-nBWd<7g9n zXDx{&uDnyCB>VU_mTfgD-b70C?z{nlpoB3rhGmre_WJOcgBRubKKIalGsERN8qcfFJSJkvt!O7~B!be9E7>{#kZpv1 zIQ6iP{ zI|<5!6|#7ZhiJL06e24=)A#m;HHfcFGsPNjyN7?Qo+ROG`CrP#i%+?4PXfk zqDUZ2U62shU2*cu8gdXuJ$PONX_ChGBnks(_|r}YkFs0)(IR3?yxLyV7pkge;B zl(RC~VU(6%NR6B@7dc?0IG1*;7BK(SCM*Y=i`1nr$Ua*;SzG2q$g5h0oo)7a+PM6EOz~K|jqMYtw`QyoZn+J6NTs%YhnuT& zWHdM)j}kZI!p7qAa<=5Cv!_fAu`myy0iqLX1EmslZ4S?(TyMTE2F>G#;^Dn+vv1oS z5kbYes0Nrbj?3{uKia_ZIjj!kexvv8;kdMX5s9FCs+Z_R!rl^K?ie!9KvI?$s!GRj z_C-Q^mGY-{my~wxNk|X{%4gQF)Wbf!Ktx-6cB!92=j3{#xNb=oyRB~Hiw6%MnE4pd zDT6InZjN|_{MTzsYZA}?N82Jizh$l_gpQWd@Z4`nuGw|Phxo!4~SE| zG9`k7yyN#xG4dCv84td&HHg^b!IT#ti2~#qSKtd&U{Paz5b=enNEg+yS@C8md|#Os zPr&!p&-w2i-&dGtPJa8{Fk9%-{AYiSAMFSCzBuC?V+5IF0Hfh{j|0`m9P{X+jE!hI z^~`33{8Mf$z`jO|DUP9V=?lwP70;lN_s+P6AKU|iHu4@8v423K;Sc5m<3SpEZ<2)+ z$V{+eA>DF~yoZ%Un=||!u+8MTFeN&pqy!Np`A*QCK$MT zSe9-dxOWfBVjb3fA2Q+Ta1Tc&<|52IuOfV_G3??Rggvc^Y@2>L`rDUfpnO@{iV9F$ zi*%G3lx&x&ix-N!fbFUVW0WrrWC#W3u(Fes;3mYfMh|DS3l>N-jy^rSJ z7Irk38wmdk9#bPp9Eiqy*2!>s(FlP2fn!1#<_k%i$$Nl4P}$iVyn`*H8)83ud+*M@ zVCFwOv!Db*{-321Bq;f+YW8g#%el96aKg2D$@jsy>C(-QPS0DK_dpOe=-wmnuDA3N zbeM(N>IRSQ@+u;e@;28weQhc z+XsOBGw#wyXrJGGvEBEnwT%tFxzk06%CSlZfRuB|Pyn4A-_pnPIgoD@ncCIFCs!Cm|W3XYTZ zERvqJ=&5Iph~%758^di0o5X>iUo~HyzN;-i0P;UD|5xbh=j6+z2yeN$w%#I*8J;Y^ z>ADgA>hwKbqD4j0XW?iKYg8j*X|AI&EDY9 zs#vQJOG@PF$w-G}(EzBgGx(<(8wWTN!$dC3Fh7hBA6r#2jZWP8q-7C6{(^=PKVhXF zSO-IEvSDKa#U<`vlp}T(~w_WVqW1uSZ5_WJoaRGErfUP2(;ZUdx7u zuawd!a(7<6CqYs1pafV5f~MRzFv>kV=;pcyc$^y{L^bcJMZATDORC-zUqa32)`X^b zQEeWHGT!j{Eb;1v9r>LwOc8F`lrVNWHtR{`#4gf{gn~PbLj;`c z;k_*!JUfepsjdi>pK7*=krV_G#sCZpxR{`H&77Rw^nPmS`Ma!@pgy4!Z!>pN7D{#Q zFeGD1aLEqbINQiz%wNR~A@sxWSbpPx7+(vqmip&W3y+mw<>l(m?@2o2Ix`6`T{hSw z5CmFEgEHB&@lg4-bwQw73+IOIvmkbCF3;WwvG(A!^uDLE(OHJ4O)9cGs-hv z+@|*a-_VhqK#BynxacjbHN?s1*YGQ~ZQUy40S+A}= zzzpVlkTiIXM_t;dY*K|safBym&jmU@LmN#~Qg%3hc&q>v8O>1in!4x=_!2edx_k$r z#*OX?UN1OqJg_=S69X4)b0EOc| zX}2_*2|)Wk(b}aRIdkw-rehH)#ogNQiDCnn+DAo1TLYPhPH@C2hkvGhkwfJDLyG+9 zooL&9pdP`&53g`~@G(b>Kf2Ue<$RbC=aXOGRJz~_fbv_Eu7`A6XN9_aZ*t2L<43HA zxMtZ@L5^Yl)m-C?){p#CZ zi<^H;M$KA@6%QkmF-{X1GYW5>8vcmXDKxL@fi>gEVIcjCkW!a=foSHs>^ZKLaw+N$ zmzJhlr2Il4;$~sJAOHck5ctR5u4w$b7X6_nJ$e~Nybr{6Jgu^;bHE*vv(3HlFaC6-`6pbWwC&osa< zYi@7%;4fG1$+oF+s#Rnr<80*abT=5BJGc4^6!u*Hshc~oZoR) ziyQdv0CDSd41oha-Gsu;Ea7a~O-A4CHGmM2Otj{R!tMGJ$dS#1!Y@PGh{*6mSPjE1 zu<}db5?o#|E-VnYl97s#WSS*GA;Q&lQpngcOAx_B{7EB+@m%4PayRTkyxxL&)}eEG)7_C^G+kO! z%-4W1a!xQS+bW3ZL+1j&Cf}zkHFO?B@#Tgx637#yGE1Gv;$J@)_;F6<+_Aeeo75B4RN34DC5tG6f(+9 zD~xH8Owe#ATxSsw)6||t%s)i{sn1qOIx6?Ssx+>9$$h>P2`4W1NBY(!snIlhIQ?hlyHY1Ploln zJ9nHf&JTJWFb@O&fnOa7w?}E#}hc8;F@eS>7@a8huvz)FUQ|6 z7}3glY*KzeizDdv4n1kW-U(>YfnoiTtJrQExtej$c2v#MgBZ&lf|}KV=fC8tJ!9Sx zb)%_=;&nYW`P2&l^XpuPnqIlx9m4m`nIY8^pwV7tT1FmYB|C~=T822g8%7|HM$Z4R z-fD8*FOs>cPjHkOsjnQ~@9(6}bs-dyeR{ja3A#+RBBpc@6{|%>GFUh`xbZ=@q+fCp zk-mdSWkVLx&I{909Lp*O6$i&R#3D^Cx(tU4pW$=?R0suU!(fV=OA(G%9;djVQ3ygJ zXr_b7r9E(}UaTKl*Swv4_F*ae^8{C8ddF zBo#uRc2DjaqYPKAcin<12gadsiP|jn?Is6Z9U1RkU~094}5Qr zGm74nDj~!H*;yo32A#44^#mD*+A#0Rx^u)CS8T;5@V<h@{GV_eA}!{4j)>hY@RqzkJsh zRz{13PzUSvybqTh#<`e(52y|wblKf&s3R>cI+vWp%1l2~%pXJH5({!`9N`dLAL#-O z<}-VhX|}s(n?vIv(pDuTMDI~5W965H8XA1@D)fwS_K_0Fn*0feX@Munu{jhKD2ffb z(v8f>swg%Ebc44v!cN2uVZzIAyFi#j-5=;|V*Iq%w{l)CB1G+rOQ48{2nwT>_ z`$xZI*+%vyZ615&dcvgnN(d*vLFq!^ZOX9GZfu5)n+4&pRjYF)NE@knDfzsG%x6G8 zY>C!Ijhu5|&=;o6DvVfq+RPZK$ING$RbQ;qz8%Wj3#V2pxXQk33mD-EyYziZfMV^7 z$RR|rbye@iIG~*0hvlEm<%{8G`Fszjx}76+iQ85sI44|j*Q_#BeqEg6?#lQ&9wEdt z+SHM^dd+w6((SdKAGqFynqaSn7+QyV;QZEl^Bw$+pj;!@voUF=NiTLsl(qvBt~vL_ ziycDbAFsFek++Gig27eHvHyAo%I%-Rx9hyd2|Gx@rwF)PT%`*%gG*rRyMW$s_lUS( zbfE-f0+4@H!&O8JU&d8?#PlH5xAdo3nh63{%gbn%(abr^96cJ^tACt6B3`v|cq0`* zDv?3T=P+3T9WF{VZFh*srY&5D?)A#~gc7!57eJtVjMea1`IANGz*{F4(p*`vZ_>l_ zpZi-5_>qDz+^ybVglF;4G`2=~ZW}wLeKp}Y2CImkpb9!81f$s{zf%fZeyj?)7~JE0 zSj(7QdppSIT-t3S0}xo0_J(hPlwV%g6DO!&3=XO*{tNA6r=*za74c_|r}T)(FlDL9 zlEz&zrz(;3q87V^Pli4sEej0>{yj=$0R){03YA~cBp05a$mTs6?3(hO=E$t`#X?tt z|4^{7V{)yy1ta+LH$ZOlu?Bgj4H_a=xXClTU#{e?c1|fALT>WsDryG!v2Y z6{jR|LB%gH@(*jI)VHgzH&>}kFQOD)izM)J?m)p^aJwL!6wuW=MuHY~bSRBefkeQ|+DY;l8Dg zytF~z)owQB@w{~l#x~kaw>uFg2Tah+fTn&|k0>%Kn5k?ai~^v1W*vVEr84>wiWMA@ zx*3K$T!Q{t=N&CWQieAs35n6dzYX!e1ZT!DDl~EL}Yi94x+Vl1I+xRXWk=- z?ZEJ%iy`xIt>SHK%jL^SYJB>uvf&^(7LIOi&~8M}-B2zb8eO91$h$29F^!LO z`B-X(gyI0m{MS$A#x`$w$_K}buQpZW100VJd-jYWvhfr(sL_-ik~^7outry=DUIu+ zh~%kku@Nb(Q@Xmv23Vw1xnFBH*crq)9_$=-$qQo_Y?7=fg*g~7HOsH|4(Z^DPM6@h zVlCN>YC;R?g0oEGDpr1z{M4iuQVXGj59MT=Clg#dZ)(?X0`1^{G)BlD2}*bFZ~p6Y?e38<6$TSVclfZh^pvo$3vdIg_awP-~3UI7vTf0y!93dmDg(Hc<~NE)Yx}JRz-!~*z0wA(p6^k_{(~A zt#-~tl)y?g21kd#tw+qSZ!CQ8ZytqJxY8&8FAf>%x3`2T%K*~$3RZq)Lq7{y=MXCg zExg}_4ULNxW?UlzPg@KjInW5N5>ozOa6$5*gInr&E{i*%`yAyp@BZ3&+joI(1~lOmNsZ?+On%*c^4TA= zxBWXVn(Z?_(wXfeV7mc@4wCYX74;Fm;CSV}Oe+HeDM*SS#&3mTF=jJFL}vt)VBWMV z;^GZ>Bxcy4xV!83pWu?yLiUuxxNv)b>{l9>EBaN=dIRxmTNjxuqge|m91Y_R()}-S zm2AUJ6?WNknj7Y_HK3RB%0c`S)nzOwNs)jGyoY$}i|9Bj3=$1w3rbdN_+Yf7y?H-N9UB--wL9BH^a2{7CDa zqxfM5BJG%LTiHT*Wao#ykE|r6nAM5;KydQ;C3Yc!cEcf~*;sOTXYZgBx@1H1C?OQ2 zq*m4dVxv|Tb?u6vQ|>y8G;+%2_iC%r7SxItG6z1ui+wUuG5kiJN0dqDrqNQma|i~J zxF1cH4$LU`soN4uG5ZmFL|eDp-oyJw;&rWnA#J(fzn~az>!mNap$5Q5YUOA|fV+lL zo^f=cZKp)`(b1tY>-^o&I6qy)(s07D)REws!s0BMVZP}OF8`=_+m&oZgg2n^?r)gU zAL`dR^c|{a?P*0q3|ejXS3vU*wKH@W^dN_(IP@ad6*?iqwKaAa&^qXrYAcqZ^2^E` zYQNWTUIVAQ3+}38O|w19p^bH@bmxJ%IL<4q!!MBF(5$S8rc{i2<$?;KYYHFNwJUN&qpMeLiv$3q$PU7)W5C?I7_H;CZ*ll#ni1IrTuR$_a65P2iTAIJ zl>Y%n(y-Sb_Mv__7AQbPK4#Dr`Iw<~4u;)2|3c(oh?IWT9_~8N0h#T(h6A+xcduci zK-puv096@w>8e%XYT*5trmxfjW)NLI3g>QQ9T&CWHn_rJH3TmIuv!h6N^;HVdjEg| zS>A2E?QiY2T3tl@cI^uTk&aLaN@axEp^B{fO}PMiMZ|qiVZ%l7QlH*a~L8G+? z_XlN);MtBm`ee%S^axjSbF|4HsokmQkV&gjyUf=PK8fy0Y4YBXR`rfX_G*G=S~IdG zK%DU~L)fEp{q{b+Q&BgaQltTwmZ7vrMjBjmG<{B??R03n+eAdHAD9Z4g@bV5Z@8cm zCBeM?z&Z7eAd0lD5Jc6(06~Hh>`ZF9+#@GFAiClH+;F!gVDgc|VA~nFJ*(}MyB4mr zb}bq3Wn8GHT#N5ttgNpsI`t$JRkvMr9G-)#9p{9I{E>C41+T4`Xo@6Ao^Zw5d;IEE zf7qpiLwX;jK|&Ah#M>fRxtNut@#2IYHid*0glqXf#;;{5kDd+saS~qLJg20Fs8s57 zDl`OHW2!N^wh|Jo8~z0gQ?pl#iyeRay-*@sEIfd6Is`X6ehH&7!k&3ONzZW4k0Hq) zNJa6z&vEc5hf@@K;%ifTRCSrt+=@Szj(bvjPZvdTic~?$Z?cC4b$}Za>3qWz^;vcY z)anHhHC=SA`3YA|Z9!AAHKvOz{23dZ{lw^4# z5BJoVxb0oIr><@Q&7~gnkRZ8cNNTPRM6{b4syZ~+5H?}CAz*!3GT2{MWtt+*f~*Dos1Ll`(p_*e3g(JfE}o9|~n&PZFTT^_b{vJO?G zd`@_S;hT5WY*561XINTi5fK#`KM$3Eh%6>9_}j7YJ!59Ux}NE~8xz&|t%R=StTQ@m z_!kF5O>|jz(4UzL+?sX=fw&%6irtDh9*ce16{g>nj!qRFSpLi4xKYlKp5dE%+(-*? zjt@vFO&m@YO7G1_^xDyKj1F@PIJ}JLK9FpWnb2?tyT8!0!B&2zOryar`w^wlAriI+ zp~9v5Ko5>5j#Mtz*X+IB|FO}9ox zEI^eEZ%dRR^N+yZd_${L3ZS!v4*h()|2MqU)_On+>9L%U>XHi=Z{)6!<&fuu z-K%yK%9!~tU+^{7Oz+(}Qx}sGcBrI|x~3KC;f?mX{!ch*s;x|jmrt+b5%pk?nN?PI zG7(O}6iHOKCL9t>qrXxfay~tFk=DiO$K`$>He!)e)QW}_EvT<m1lM8Ja^hr>ho%&i0Zw2ky2badzN$TIBXeuO&a(AH^c>)^2e_TJV5)6U58 zWNn`^M&khzm2a+WWcThopq{*h@FVvYwZTqk3OQt3a^I~0$v-U?KTk-P;)0b)8Yoas zjfgmo*fZLm5~r@+e9B&{`v7aboYpfEpe?p6mk}B7%ICjDHX6!57rY3PJw;CP-ifuL zuaa=tZQ?#n5m*y0@Q6vMO`{9ZJE|vF(V%X~hwcR`^d-+m&m0KgkU1jCT(gUEzUkbO z;&Yh11-HfzGWkc^Y`h0R?=w=;;{8q~u~uZukJq6Jn}6)9^4f7`iv=kr*Bq(@PZ>FX zkkhAYCUt^`xaQ5O5@7zROAPE(FdW_S-+8JtA?k3MKf*~f{GQ|&x1OBHP8U_js9hmu z{+oqtab-Dc7O&N~y3pab61yJRg;xnnr`?BeF+CCqpwfAXJky~HJTO>Dh7}+?GQ<=g z)y4)#8m?p`3{-xE)?>mz42y83!7R zxU&Z09QXOT@zZxNmG{gREB_V0_{GoWeU4b(pK$a-tzYnL=~JG0tIManO5-W=!V zy44?U<032s3NGp6zYVp{LcYjkc7mhG*gFairjaEI&A>}ks(LUIF^n87DKu!6bgjqG z6U-}s zuCN3#5~fb*m!M$YxKChSy0wmu4Rxz2EHmuTIN!84hEi6xFR9bPBf+@zf7BPhXotEj zi<;KK4$^AD;g7Y>Q^WLsWHP!1x4$Duo?0(LmtphYp(^snY!RI8o$Q-tZyR21#3UXD z7vJam$Wz?GdrPfWf2WD7GNI&27zd-|mZ0*vz->YCDd>zjAgw#6epj1&Z4CDWU`QVU?0*;=_s zEX?ySoxTcIL!Ho8DXxtLe}HAeL#9c4X+R;z0~3ZNL1py{(h-h2l&e6?r#F{2Hn-N+ zm!21=}01D!b3}!wccHrpN3-m4A>@mZaFh8xE zRzdRHOyTbZZNl)${_*#p$vH*Mn{i*P@dQLPi$cn%C%~Y@{Q%ctOdv7$&YM1RydE@Q zckB=CVvNXC=N}L97S)2eG$c=zBU^JE+_`vh1x^psxe+Y@LxIqFOb9&tAwS8=5S;wt zCVtA6-P0y$8#$m6<3bN2;xwQ~x8cKO5n1hJgSZwe|74RXGNk5!BX7e|=m8 zHCJ}$1V2F z@6aiJqrFQ$aU7kMLqif=Wrc@+6d+=Sh$UNoMpxT}g=Z+84%Ay$5y_yVQ6esI@=M-{ zQZ$sl{S#iOIJbt@0OI{FVX+PUn7)gM_^~N`Hpb7v`eV8n0X7AqACb-HQ!0ulzr=3h zv~SM2xJR!>g)1Z>v8e+SK^+B-+fuG*tqz{B^VihELs|WMmcCklRu|bX{0uC~NQ0Hn zZqo0e>V08=fElQirdK12-SenYD8=(%f73&v06K(nZzcFk1%2l=+~gI0L+Io&4&3i2 z1`~Md`b<47V&mz@ zwKiU4aTZgjbm66FjOw6z%JV)>x&}7eRYJ<@lAXm6ND)r|X5TdrhpmjvRuXYo0>2pa zY=mHB`V}qU**rYn#cNzg`jiy`SKEkWYA|@yADmE-vsq{40Ld_mC<;87*LbT{W|8A>eT>#8)`9`6Lgg11^heNK z;U@OB+nAfZ6TIhXH-U&{;<@S@X(00t7xeeczX?hS`FW+yxjG<)JRjAYi4$4jz5=|b zI%Pg+FFj4_@bb%^b4@-%%Wo3vHg00@a|qDzb`FQ-ldP2HV-Z5u6vQ=<`PHY&11Tyz zsKQmQ0*7$cojFlfAyX~RdO0=vO7o;c*Njl1OAG+N z!5cFODKoBi79dy}Q27)7mu)cmTKgE1iOn)TN_No^t;0SJ)ef7usmgCttaLhEuG6fm zQ@gb{KuS1MuZXUILT(9Gh6fR$4k`c5Q~EjE1S~m9$vi}@IN%glQ}Jdeng3$6i7?gRe<9-?2pLi zJElJXWP)FKdU7pQsR(&ere}Q<6|LrlDrpt+LY8jNMVu7ARW884ke4{gXB=e7<{pHk zTBMH}Nc^+lB0u~pl+%LgXy9+PDyub`B@i$2OW}>6ddaaNSa7> zxnK&Va4*8Bx`Jmyo88a|i^h;n_YtULz6Y5%b?J>dy!!bcxfP^l`6v&~ZlC zHPG8QYR7aoh&7=Ga%*YyU zgO|^P8dDLQT}FjoM$ z#2*5Kkvq%Qrolx{> z`E8x%r~o!_^njX6%zeRe+uMC9-A?nWZnf{W4#l#?Pu8;KZFaZK8xllJX@W&EHu}{y zk~9R(XP$+>VtidA+g8VmSh=3h-9`;$*)Blf?Z7g|Pq+!7eMz&3ZLr~Mb9KHS~GtwTF^Qfg3^yd^jUmQ$eDYmbk? zWT8jjtGgeOBJ}E89RTLHs#5I$at8 zLzW^7>xa0&!;*rf+@_;2UUu2@;%|eW|NH;;FaPOZ=zrwo#I+41Ln0w_>RQ0*$Vx+( zbcSHa6)(R|vHq<-Dcq!}W-QA{b~%C4ZAdWbX@`0=u>j`xM=CU5XW24`u<{aEX&<%K z_3G=T*8xn2q==c?Eo#rhkQ#Qvx8`kvqA4^LtX^xjy zw*uuiJPS@ZRB1e{Dz|K;LcX<9Gv&8Ejl>%qT4`&HmXB* zZZYD%%4WoqYlg)MghE>Tn!SYuUfUxw^e9Dv=*=Cvsb#oRcC4}n#Zt?&aK3oOX@h)x8{+YX(km@ZDyy+*WH(8%}aek}Z4uJOd|q~_^cS*wV& zapHiPMDv>Fvr|Ecg|~fo+YC01X<&+CTNNL)7O+;J*j`%pKZEEZE#m*^W8H)zD&;Vz zwn2=9JKeZak2UJe`rV8SZWsQ;UjZ|V8IA*S*Tmm6!*cfDhsuC>`tz@c;8yAZ(~bDBq*xJ=Xi&qSqRLjMS!aKr z@S;F(T&<-(>@@-l*N~k-)5sq=hwlNJ( z*^6pzq7V=+EIK7xbW)p65#GVELP8kyEE(zBymAeBN)L>Z8wFxM%k0&2 zVpvnGqMCj$!18$|d{K-y3&|s#U9=nSVgaq`a4M(tbVWFn0YP1&Ko7IN$lpX*nc+-P zb*jsU7zio9&SVs;Rx$&5{ovKY?Q$e>qJrv;*<#mGwEV(L!9~khhj4Piv@1pPuCz;V z@?S1w*u#+~WxE5_^d&t}?G)7FGAb*Mo!yd)IdVJ9Z*x^vLdj=W@ei{s9piU2jh(Ex z(#Yz1CE!10j+W)D0n2Z%x`$367Ua(RGFh|C1o|7K8l(Nt&LtwO;(<)rXDSo63YlM7 zt#LlON!!JiTFKm-GHEO8(<9{<<#9>wWgbWh&ok2}g`rmHF;YHH|CF3TA5(v#$JrZ1 z(Md!Hc-2r0r07cJksXDL2UH8j>_xzc5oUqZeY4-dQy|ETjbodp_3fqzq-sBx z0Q1}K;Y`|o{**oMb&e3fB_rTLN47HD)6z)qX#?F-H2sQn2(a>-G@YD+gfJ$0pA2#VBJ00SpFU^0CB@u_POl+4b4q!rcz26MXe*P42pD&aNi*y6k&8NpQM%=>FOY1 zzS2{s4im{=NO6uERzPI5(MV#~*W7+yu_W+ud%0(SozcKxgqTAH^ z04*flF{W5<3T2VxJCL2u-lRFeT7eY73WNTI*9z#J+VVCriB>QQ7s=yXg|OU+F@wqN z7*Qjc8P(XE6yaL$FLL#Ol)K<~c?LSs;^Q1o-T5OIdI8CCa!u-e38thTXSKS2f}`di z-L`6&Q$&m_Rv0D*j8at*wmZWvS}Mt8%EOu>L@O$EfJNy*IGHj5qjkKz_(qZyohfdT zQ9UYf*#7BOlG_@6*eQ|TBGq2c`EQ1`sH+Q?tQV9M15r z`4(^G8rsP1J>T(EsF=_Uk^lO;HY7K$F$ZT|Ztz3#W%ifqeu z7lWBaVDcG?Ll2#*vqZCfGJvkvYuZ5l$lA~bVUkdJjUqKr`4viZ%djEgB_&L5RGf_b zG%j;+5Or{sNXV8%G8}nr(#*z)NjaLWgqPn~bOhL{`8`X1e~)*U%S4YjWxbVbn;PlY z5#wi|Y(|EQL`BE4rhO5o*XZ^!N z9gsy023y^+LPTg5{U*ygfT+&-_o+R0Od=iTW$0bnjG@A}_xS*f&Nat9W$BIT&O~N2tXnHNs`cY7IWm_IjP4aKH!_mXP$vB6=+} zPA3|%0IQTPh6M;bD5SKOBB~-2J<>!EB@rz^4dn;R#eQ9Kj)>@w&?!=W^94+D=t@Dy zQb0d-r*KL>^sqB0FJrz0Dg+vY~&VfXb%mJ4pf!iL}nv>(PBE6?b`R{Q6K$t=A zVIVOrDbDnBPJ4lO0E*76Ti}y*rXuAZFS-y%wlMi;oPf~6B=rZQIK>OL16|Du%ZQUG z(sGBBUw7BLo(|iG2wglbgeD7S#7Eooco8`h;Ubj$_p09qT}-EQpW~`6Yydpq%g#kK zbe3aeR~_Nt&eul{EhMyo_g-o^eAq`r_c~EHn?_IY>>r}NB40nfiS6{KqMRWtKE@psCH2;IxHsRF z3W#|GrzhthGMyW-JzXsX!&IRRh^v2Y8 zu<8z;-DZQ~Ma&Im@~=P){~hAl5K=~owPOk55}xx^INuvlaDOGcCgCyC=P9i0VYOdZOoFbSJ|C?m>(DqQwe zz*~mwa1JL$MD-viME|(;?(Y3Nk4sHgB)Go1Fb=TpornMHOvz|Y6g}U6)2`-}o4n^e z99|+2WS0(@Cnba<8j3pYHQR@DZJp|JODl#4-!Mt>O7czz4hnZo5*|j0o{+j?|(#go>u_LibSURK#*(U8#tei_3?w+^jt3zW?B!A z;%?vR(OrIhN_u!)4^8#qzepOrP$u3QcJX95#S>E=J$@AuvZ0jTKcUAF2F!(}8%BV_ z2daO;KIiD5e9QHSA-74_p0$8e+*fs7QiAmEE8(hcdJ)4{Ha&)vTki%Yf6RMb_Pm9& z5qAfGE*-45+yP%7*&W${gF)`fg+UFs1WHDvbrpzN6wJeYzBfG7bz)~jL>{_9@_AM1jhZr2 zJ`YbkurpZ?%=doP`<`HnxHuSEiO>O>Y~vlhfhT6 z`UKkLRN5uD{Es-se2Z9L_zaMAf)Yt{ta%fcB`F6t1$&DkNVS=E#j7ssNLEBHayRf- zhZsn}c!C$&$Pj}{%`)F-w7l%Th+dRPer1^)ZA3)kU2hZ2_<9_bZrMeArj8i}N~25=`Nyw#UC9K)9BXDT z=-I77r_aG4Hws2#~HpUS~IOE z>0SChr9*vFa@9qq^Y(CGj-iVBD};_K@kyKcvNB-Z*_WsbhD5y^^;hq43Bg;u; zBCbTSW3`ypMp5!huk=rZKQkO6p}m?);WUd-cx41-1wTZwZ@s*wY_kpaN}7ojQ3Vwr zQx=bCIED}=pXMY(fxneb$dMA&=8JwfUePbk**!x33wadcB7cPAH&gA?gA#(S>atA3Ym*#(}maB$bhPr{<)sJfK!^NUh5r^{=7V9-<8sF|(_ z;#!J}04;;%pRQsm^qi(kG8EI96MiAb4V^rb^wcu)QP}**mKYxh!E!+vuiZfODQZzj zuXs|QrX%D{SW^N}YIotf%C9ZFh4+LbagBpEzU=vj-BKO?q>_63Z>xSH>?uZ_m2o zen!+FlThG~F%w&2;ZoZ%9pAPPa)oD=)Lk4-$B52WECbDVS%u24yaxOh!Iz{UNcp+> zTGph+XIL#3H5Rn|VaPjA;b1t4snr`&NL_J}b|oyMJ$R1uI-?lQZ&8>lr- zvK#mBd}&%7aR~)3@-KyzoaP>>@g;0!3gP?5-~XRJOER34iy}@mEWX6ej(zR~Ld~YL zNa22P=V8E2jZmcgg8l@et6EvyF`&C%coEVxGcu#Jeg@sF76RSy$S_5; zUoBM21ep9iM&pU1{Z@4>rSw|hTT)UCK1EehvXiKcIPPA%AME}y# zHO*@qJk^=6XoMeh_NFHzqE!om>QQNWcqnBlrUq_J^$&1L^}x_fHZ=;Y{DS;U zU6^Uj8txLXdqo{vX5+X+cBsvF2S4&hj_uxW%sF$$is6R5g_IN#Z?L;^0M^~n&~1mBs%pZn6ac0szZ11!O+0#yE07r&IV`6fxEwAB$G*uWlrVk!r@BJ<c+Cah%Od;3@?&NU?md1XIO~Y^TK5VvdxR0v@2so(m8!%Nxy9SkVvyH=|oA=Upk zjytwnbPtb*d#{PCwmnLVjerWu?njaGB;D%jdTxFB7=7vF$74v`^%lRTb%L54;ic(A z%4-GB1liy8+(ovu{Bm=>u0CH)AU|ry_VHJEs>k)+SJ(k~_TwI3r|T{ZVCXWoy{Sq_ zHrd9_T6dDhN#3fX`sCqx)eK1ab*|ZyhZt3g1BGXjBAjYi&ux63V0<1rR*cU==I0Mh zZSh!S5MsT~kBE4}BeRGk;UoujwVFg`)sE5=$gF>JwSvrg(R_nv*osq+l_or8h=0zS z@b>Wg??{=*7s}u~Z}&RK^k7GAx1HOz_ypUc(`BAKfzUrh5?^}81G9%D{ST`dd2wp1 zaBegC31+g49A+}7%V~5Enh1|z)1A-l-LV%YGB)j)hV|7XN?z^A0ZI1fukK?OFLv<4 zI|Mr9H!pBDVObnu?66C^8?H2$uBj&8z+4-2b~=X*yR;(yNG)1pJOp6*2i^A08>cT7 zMpD0Z$nwy78YeT73atE6@iQ8COKaGm6T?GnCw=JpJN6_a5>u+hYZ_PrR72&47HRbR zhwi4*cF7$PasFuG8mq{_;f)q|@9F9CYWOI6F_^fyFu;LMIhosJgBgJ3Q^7B0`t*m} z7<5kH8rpzqjO95UfPt|<24gXW28aE|y?c#&b`ecBg$gVk$$&>6>oi+V8c(@lbY{%& zfl`WD|1+9ZSkwG5qFiAF8NxJcx~#p2Xh;P>l!6V?d7W^LpW0pQHij?aDb!*$^HhNH z59Eh%j@*A-A5N7rM|}LOa))5~#YGL%D)DtW$mxOA0Vn12VD1p}`H&uTVrA63Bl(ij zoYwKd!$$wuo+(F;F||}x+6azLO)q5V^Zub+Ej5FeCS*#J#lk7uM_MoZ83*c(offB- z!oihcjD&zHKyAZHkjmk>sSFQN2`|3|%OBeL&LG1XIX(Iz zZx+zz=skxh1T*;ImsXKU^Bh+B1uFj&t6E<|lUc)=8-*c5`z>eI%~r{~R#%%RkIev_ zr8a;P_2J257^~b9y-Z)|@){OrJIZ#*Ng~G9r#iOMLr)$fg@SjRnEFLtk5dp#kow*# z!6JB)JZV(d!bw99dawe6{06WkAm>yaEf3>YR*gSP#{nw;4OiwX=nhDS$p6t%?4EdXIB>( z1mvkhmp9oGfu7AKH#wLyRf%hs@}v7-n5A-->Hx~wCjd2q#a(J$7`P}Oa&PLxr6Wbm zqx;rfccyy5Uw4nY=|22*MK|@3jWcUebe0n{6bOwc8O0}D+gax~kM3h0Wv)_WhSTBU z0SsA+7IofLbw8Bn&;9dTHh_}3e4iYJF4+*d0W??{c3bgGcy(8LbpPB02|?)~L6C@> zM#4KOwh-rQ7_4L5386`jVS2Usyz!)Vkj`&`-B*kI(fz`Aq?KZW->tHwdObM5l?JH% zcRYC>V5OPKgV=9`(S$kMy(vl?B`c*hDt?+NTC+ulfN+rfu=(xk%NGkPE31nbE$^H0 zGl~Yx8yu)mVTpvMTbjX9txbVevT?jgC6t&$M(m}TRP}^}mH+P9CK)*F=x`};H=A7& zym*uW&o>ki65(=2kVUy7lgc@P!lN1v6Wv@WNRKt702&e|2RpV+^V1Y0xkjie(}P-A z6SPoFz2du+U)GSPO})|N45-R`G0>zAzO9_@rww$KOtEroUI-iQbV>#S3Dj-E|M8jTqD{%;7~HBkiyU2L(b*8K6yBaIIOP@pqvu==pn=*l+Yb$pu9hr z5vr}lBs=}3%xvLna$y%pB=yvG2`lUiK z#|g{AC`Hsw+b`|O!C9s)pz<$WeI7d5##XftqsEi1FsWWPk2^3p@lHA2P3;`=<%QZI zJU;=0^KR`a2$&6A;lXC)_H&4Q31=oVbZhIV**@Ods;$rYEw3+Wd5H^g~fV9*N`Hyn$)@UCAfgU|6_7IZuYB zBUD8To@PYe;rT0yi%UP((vWf7TjZ=BcaAzca_y`Hn9t$SI*3q+B*%azzyIz4r>v%{ zBTKzVxI=E-4iesM^#?}-jge<4cS(a`?aSy>_zb7vl(OCMMefuUd`KCFu#m$oBv?E= z>9-3;Ma(~X?cph8<6WzDjF!GZ3@$C&JMRwgra<$!f!tgT+){7gM?3?8dlsa2Qj{}3 zD6$Bd3VuKO(!gHxZ+GD%1&oH2o{A;E_xj)jK^(^jhaP0hxCKb|4jur~ijnNW2Svp= z?de5o3=T)F)*ne$R98(dpMOIYI6@E~f?fUxeT15z`=}Rz%f(02gOMp!#K@yGU2m0+q{9h?!sQ!m{_a90J+;{DAn=z)^&&Cu zA_T^;MZ&2gYz%|^9ef}4*~$vLAJ<@l;^39l?O7rl4)&f@Bb*}#L42|EZl!GnPCn)I zYBsFUrmON@2#amR;hyFaS3MVXY6#|1`xodC2K1oIPLoD{;|uao-yr+Uxp}0gN;eX(kTQeVYh!p&v12alCy5KMGuhZ}B4JhyndrB~e-lHfL)7D62Xd&TicN9W$L&~8q6tCdk zz< z%%inh0sk>CEl|Vj#)+hoC9(2Se4LDefyw_sT;%FQ<^|-q#n;>ep4917D4cS0KkoKM z-MNiSKCJ^v<40GE5>h_p^V>NEnf^|b9r@+;CRL)Jbrf3(EuULs`0xVSbz*g?_DAqW zj?YK&R`Bx6E*>2-EVv8yiyx1ybVff7y8W;3-bI$fK71dPd4`1F-3NC))sbXIrn33X z?_aFYfiA@p(SSO8n7i{DzR-9(JfxH@+nSXi?9Yh7QAbw6%C8Z5nE|u*3Ya-@(!}G~ zJ%N7Il*wB~%ddc$b1j+fBwljojTpyBf|#(q{pOD_T?j>HZ3UF+*ZC{qXxZ_!K(to+Ik)PO)c=Q%z9Qw#5?{Y~#5TZtHn ztcfKMDMRLe#=G+DgQEq-Z|r{S?kgi;w3+=oYVhK(s92MFij;v*T?iM2-;7H}8F>pt z$KQdufsX^n5>d`eQK_cwsD!<;rWPK`=3BcWOiox;a)U%-$RaHc!15{4awS{HuZ7P& z6LG?uBNEy0<_z}|wrDdE6ViXyv^4^r-*y=hiMj5f_-lZp!&aRRoV_a)y9wKgK=?^e z!5cU9T%c|bjjYRHIH!SwQL#JZ%}!&N}L4 z_l*(4KH~Wp#~C2zAy3$3T3@(q)2UTdCg@~?#htti^nh_l5yiV-cei&FXb#;B~+46VG&z4LhB72ig z#}SP%kjghJd@CE@En;IPj+?^qVqtTA`TMOGuU0mf*Ghw*kW6?)v&yK- zsx5o5`s~%p>N&Mcz?5TNTUOVk1bc2&lN3&QE(y=-x@kv55gRiX0HoM6g1xr-ddb2k zNS_f6a9GNqBe8y-b492>8mZYv_2EeT1{uRVRWyz*>oarNcK=GI@9e%N}kux94)B=W2V zQu(GF-^%ia9iB;A!!(Sf=vNB#tyeGC78d_v+A_&b=}8n&xh^@ba(_*-=9zEtq@ZEO#QzFk%Kv8D`z5 zuU;;0F0Z~clVXDX)PgC;W%KdY()WfY!MZK?T?KCh(_dbnFB9;TX`1WsVhQoU);ySC zt%gvFKef2}Vr>D&+N#|~C)nQtBt@TowzRUe2}^Jj*$KjlJVEV4D8-+V51%cqFFiK| z6Uo+T_PZ#VKHo>~EV9KFwc)9T6%+gXA7)tTA4d{k|4cTQsMCt#QXjE{BbheI+zyxuu_%U8iBw zBC)gM=*qCl>swdjl08G~NT=kZgiorVdj1ruC0y=jjctZgkk-B?|DwP_Wt3Fd$W(>BcT$54}AFRWXWbpl<^U@60O{&e~I*7Jpx4Op)0 zTWcl5U;;T>i>Zv)^shV*Y6vHo2X&CjH%(sRt%bEUsNHAP1VSjqzqGQt0Byc(l~15o z7C?%9nLlzat;LmvjSbU)3FKu3PnqWVFU(PO08DUxQifBW8TrHN#;bL^XeOA^21^;H z+^2M?VR~x<$sZtD^lBGPitdmU-OZ(ne`M0RWV|EO+?pES$OQ5*gwnb@{PXdyF}^@4 zzU!NczCCH*7;Ss@#ll~fww|ApN7aI9{V(8@`X|BnZX3 zgbiTpDUv1F^Ro&1xd2k^Df(#X`^BZTGq246Nzte2vvcy@giwlqg+A1+hWAS&U?wtM z^qmk&@ul_^Wo_cx8*OdIQP!wy6X?kXt5pArLN#&yjYcK)uQ|q=xc;S6teICFNV@#; zyQOujO-#UGu(XHf+@~*>zJWCQ&I-~AJTN6RWw|7uui8dTAgK!=#g-PVt!^xzUkf~% zvY-VNZdDEvn5YE`q}cOcYjI_1;U%^p2_R;>jV5jo>{1Wh@v3CHTv`r^_eOudEDp=IO}-B>CEs*KZ)u{u-{ z6=)oj15<`sW%v$f4pvr2#Kd?G2d6Bzgk|;R=IeDF#y#Rx?dlX2t3Sc)%mefj0a+ERL``#1`PQx=&C z%d6OTSD%%`PtPzD0z~Ed)b-d3RISAyUN66Vw)%SG`9>}AUq_$oj%(p4c&){UHMQ8- ze70<(nIhrPr>cNMR&J5|E>Ef1U(O)+1x-1wxc0eEp>u3nF%nU6#x*R2R5qDEFIQh} zEUiNUwLDYn#h2mjB%{ond8rJmryhtB5 zB^MZiCfNp^VSlLtE3@bXYdvfC zO^t*)!wU0w$|EZbDV=PB+B2*$#!`Hlb#NLyT`e`^46{z*ltp?A$M!F=aau8ZhTigc z!ZXAZPq;74S=!h#`k=X0$sz}>45{hq zI0uK}{y#^nH$^k62|P;u=~9#8E$M=)L5T+a2wrUV_P37l+JGUCh>V0m?BT&>Lev(| zf@4V80k;nE`j#PDOKD{#b4aO?g5F?sC7ni#@g`5TVWA_))+?s3ialZL0TuxPXAgG%r~hx8jMy*+kL75ru<&2ehdE#%#*_W5QCab4cB z(n!-&6!em}?f6+?#zTzAsc1Spsl~~}LJ;&d>a#_O%c@O&b)HS;1Z}3b-@{|6N2aL} zy)1oh5vVqAuBor0R0TvrYNLphS6nM5W;`G2Ynqm{WXCNVB_(ie;z!NlJ_)A(Uu3aT zjg-ajqc)wcX?fC~J$A)1thV_QSO$>DEh~v%q|Da@CV^JADSleBx{D{#jT=&WwX?L3 z<4ud*_I}&8EoqmjPmF5?kVp5;!zYxCXup(*Xg#Gj6B!l1;G{J5Rf!Y1$XW=1aU;kn z@U3{A<0r52ep$1N_tSdBVPoy)N=0z$* zDv0UC^HAdnm^2T+bzESow%w>A+hVZ<$4E710&dZV)Fw(-Y8n;sKAw__kd9~zP<+^EO(&{EiUtDr(*=<6WAzqXn(PYW*+dQl@OVD;aM|3=N$tDeZ#E)N0ckIyiIycS$UpX(~GdyO5{L!Xo&q>S{;L1mB zbbNh7m^6)baj*hYJC_1p#B=J+UD+jGi zm-tuAA8QsQNuFdjh7TC=nBAcL*80^V2ifXZLoR4?7uI=4ciW1oG?)EHTOGVWlfHkR zhOHscN_wMAT6GUZ7UcxY)=hAwOmAgSM3tR@y6-ik>D>;!9$al}(kx04Kn!o2I@@wj zZ*ReErcwv;LFB-I(=XAS>AvJ#LG3b%%CM zCW*O02g#W6)FF#YyvTK|59e4lj404XqEOn4s3;dOO-$OiQUrlVSH4;OWbd%koS>zr zA$1hWJXH*dX={>*Ey~tz(8Zs9$Icg@RlWQXaZspu1;7|i>*v2xl-oM)Kq1>T%}sI> z6cFR6g+V(xZ1q3K+g?=7stYrFqqO;?7N^Xsy*fqy;vN(tdOzLt^0_UbJ+zY1wTCb4 zwVH#nNJ=v3$7x^+tV~mTl!Lx1-xK!i(UO)itxyLKa_;|gB_C%5x03HYd}e)1k$9r< zTL`0R*G;qNIUeGjC2N5s+0#jLk;JDEDC@=Aqo&CIU&xyA+i~TPX&Rs4L76Q|7H{VM z`L&S=8ca~Mk>AZKDR$?#+!S5;F6`ADq9tt^30+z`KD$U<72n`_jh|v`%cl2+BuA>| zT#|h=R+uoj717uCTl5+WtnyK!`t>}*5Ns_aeY(r5>68$G|@>kR4X z@H&GeBDcp&90e|$BNq=^KUOWtb6X-FT_@5MKKZ9QcmjOooNn*(8=B-n`{xLs_AVR) z&PC^Sx{F}NLt!PW`P_OIlnz~6In~~UD&NMQX?Kw%^)Y1^3GkKkLYowtBdeO9lfY|} zHUntonra_4_iJ{^^J`y$ubk8F-Hd7*&qV^rvmK_DGi+6Yu%aaYdZ!)DdTi`lCIVVz6hJlY%ZHcCE$ONTpKhb{OD?IxDAr(kXL@Wwrh zraH-VxYH15?cEs)dfZaidU)V;9`lL78w#$J7c^KRWIKTPXP*n*kU=OTj%yWz04u^${& zL;fO17KLYKjJ!XxqW%Ls20g^PjG=5ul0@U|dBN4@yjO8kM0DArG2_I!iCy}|anlBi zNA8Ctsj-Bo4VXRd9OEVCI#)oFSR2=03U3Xb8GK9+ZdT3na}(f(L0fzAxHH(|OBdn9 zhjk z9l~?-19)`ho5Ck#CH&KZY6E=bywo|~f}^gpX9M~Yod1yn`_6F#cNGXzX)cH}@bnUE z%)|r_eZvq{RzQ+y98bi!+M-MKVL3_K=XjrS0j_*={-dhhmLye9L26C6k1R7xi>+=4 zF^h-R`>>T_E1$L!FftlSraf`1R3CDt!ThquUD7qOQ`g2*XZMU+iZU-W%dWwH;+G>EWoq8Q3-X<>!YK-^!;;&VYMN-?xh?4@}IxXJsl2&QNWRl7?mX1)hgD)Zeey1IThyM4E{^dXY z3;pju{@-8x%fIB2YudVc2t)b+wOcKlE z`jEjJ4qPdxdd+sf=5#H|z!3~s-f>m-C5`U*b`!Ym?dg82-pQ0Sykq7Quq!^M zss2HGZ&0-%lcf7NK7zK|66iX;LDl7xB;is9Gr-qToGU*2=lLQ^95vkkJYPh?ZG92^ zd5z;IY1JlocIl*OK47hMchWX`N@n9_3)w3j{?A}HJ^mhL88AZXOrbxFrZZ_e5GRJ> zTx5|0x3Xx8H=e3CaxS8QHcYFC2wf#}!THgdv;`Nab>;B7^Ux6#R|oDo>F_3eQ zdO~DIFlk!5<~s3y_Jx$zwhtX2L23Hn{@0zMBjYPMrrqyV zH(62-rjgmTcxli(xi_I%GQJlH+^Pb^cmJQsci-||1Yead$p%Vlo@IM)aMHEY@l0wP zqv_oEU|6-S&O>Srtz9)e?2;eipL6cW*rjvFsdonyU0;dlOFFC=KSqphN9p}{?cKqF zks4=8f#%?JoGx*4p~)1KgytY~k=1q`U#0t!Bt{~i4Ho=yRAlS9Z7*P`hPGZJUef=p zR+MxWnzE-6se{*%y!d0?(NEF_GiEabuw8XiCw!Bok|F9mOcsW2FtoPpvZE_%X%<70 zRbP~?-Pjyy@g?uTm6lfKYm!JFx5GKsaJmlj3zTLNCw`n{@%<(Qo1H+v8-4i0U%qoN zI6C|}zp+3iv%vv!-eiE|?0Eg32S4ZUZ4XN)IKLeYN#7O3E6-ZU#dy4*k-*5F5(v=d zb{frY`)+d^T3mC-R<$u2*On57n+t-Ht#1DZ?l$+cmF5YY>7cnR1r901pmGiQ?pPvU zPN;slAfKQ;O4d21?#jMxHM>N4O(?tV<~F>*)f^A^$Fhb+eH+)7GuW!x!qesKJBLcf zI0!EZVb9)t`)n*tZ(qQFzt%)G(IkJC!&KYD_Tesl%!lqgY*UVFyVJ2Zw*EMdj7kXG z{8RkgY94C`QX6IjceuA#I$QbkSY$5avH7=bt=Adg%H<(p&kHuPDZ#H$${~PqgKq!p zyLU0y`**r0gM-fTolbB6?t{CfV#09sDR8m{0ty>2U3}XfbN(rXK-bDFf%ik)S%-@Z zSN(E0(dXlkrI1wo;-bR{$8o1sx_LKt9I1o=&Me~Ru&y#Wb~+`acRVOccu@Qtf=b5{ zsJ-1bwqv=7!2WKL%4faSKH^4uCp^9TP}AUB&wRu^O&0BMWV^s_YW9oq{p|_~<;_L+ zYxa_FABJrb;fHH2J2)`0n)F!Vr=&2e)ThKMwFTiJh5WjGaG4K_UBS z(S4MChonf&?L#|PMcAT(bz*OvxFKR@Yu9Wz=9ldjhh zqAQCX+zkVwnRzlw2+nT}+NCtKV@F9#3B%=QK-mO}juOo^>91XQRmh!C%8@g+zlw4~ za`l-<3TdQ=D2>YLdWcGRX#7m){a8D)?*%Pr{kYR&cZi)}V_Q&^Q<^13%D%;BM`{Dn zNDJuh@abAWB?NlrIerf7E`p^RI5AeRa1nvM`JC?m(k8h^VHhES%pVmmrsiYkkCqae z%g^OnP)Hyf+y0J7GQ)s^@r}(F6N=w$IC)5ISv=W+vp@T$+1qaJx3a~~;UVRW!DU~J zhUgo(-f0NO>KiB^R9C*y`=?=ZL+zVp;2>Py@npEG`AWtP zHy07?PuEyOxVxAwKp$IgL0drvkyiGic|2^gwjpzs?tYmzjFm@JLRkK|jGx=kntx)Q z_4Dj`8<95tH&O#P50Gkems=)cp32iz%)PeN1ILQ_prG*o*0nOT)xb0$@F6Y^%S`Zn zin}4Eu?c;OBEmMa9NaAlmOFe4Hq2&x7ovoKURkCK8jz_*6_h1O$n-Z;=dnvtO9{he z&kzVi8U4y3%Gjz?3GI&+{2VR}1;wodQ{(ZVC?TNp=wu384RJ-+Icj$4TC{;4tLsQ1 z?TZ%CLY-R{hA|SRURpLP$iP$)59d$|pOk>4{D5iPWNx!{Jtr>cxcd99%{?=A2Xwp=E|5k8)g4^bVdXnq&|^25prCMGEq2dEg)9~v zzOO1r$TN1q73G9x3N(rYc-aAvEqX{Bw;7SKJAjrF=qnq7Vn#*OBgBpw@UiL<3JC7> zM$5>5*=Ai>W7r#Gw^=SCsIwasLK3c8nVS$8u;ff-$IeYxMv#BI!3fzxw+jk4b)G_F zfvrHhPHzt}i8P1A-hly*d!)#Ca!PBVC?~uh!oog+_e~}*tVP8InGVB=Wf?yVC+dv3 zy^0eevi51R2&2{DuW@GjOo0wqrydWR5q!6I4UAbD@SZ&cY7)! zs56`RIRq6^L0`ejH`N`x7fYcr(8J?)#ql#1S_%pD?N<&%E6&zFJ8rnc#oU3NE`ty* z1wh0Fwl5}Rm&{;_Sb*Q+W>k{qMgQ&=r0)oovt^9Jc-|i^HNAjzY?lA+pnz%L)9fF-eKx zTJcTt<>RVc>5-$zQAABq;rV0{rYDQVrv#ck^S#_T=Gk|>D2tQVBbck@#yyCSrW=!@ ztPsOZ$7sczr$!n!GEggSqC_?=D{Q}ejl3!({ONE9JMyq=4PY4M5d1oIU6oruHc5lB z%WllnwIzl8Ds?LVC0kNVJD~9BwvgDoWVa;^s4psH*OnBE$C7EOVe`c}Ru?47juN<~ zV#4w{HAz=^X*Fh_t+e)=J13bqj{ivXH$$8v`-Bl`kJ4&Ul$OeTvT#hgiBD;f4LY{% z0eQE%^9B}SwF{ES!_q?jE7~AL9IZKUR0auev(MH})|R>PNM)?DiA9rh5u3I@Olf;i zSlB424F)!1gQx>x1(m4NoNR9UqC)(K zSBjNMSNCbGX-%81ry5-K3*)XHeVV367IL+u@PA4&k`GZAojUX9KVwB>>C)XUmX_Cw zvMr>k+&xXZYl>>SmlR89TKhO#z$I~{iwYHW?)d;lC4p&pM5@#j)gfO}EUf_t04!$k z$u0i*&qRzQwIal7c6`8$5-_D=LU^YjBoArP0X*33w{`Xi0y<%plt%ox^^O$XWYJyJ zK}$+C{`d?}^Wf>F{bHOmQpfvWXAAv49Mdg$Z#&)g4v+rFRh%sd{tk}UtVREIN_S{g zJcQKgH>2ycsbm-rWGvS4cn5LUd1regV&qo}3h`&r>7T)Pdo4tupW18w?JiEW%6CE{ zmQPVa2yfyH4CQ&PeGAzIpJ4WU;jc8|{FaKO4BU#kRXU~>Qbdq%$cPmSQSmP#hiboH zz7rfVA@%!$eDNDCkEJ(v(0MoL+(md1F3k6>yCh;>+fo92WkFD~P;||>@8Z}JJ_IwW z5nonVM$m5ponzjzMTW}0?YwJjc1V6mBX;C)(U6R7gq9MT->=CDWifNaFeU9o2IT>< zYQu);H!F_EH;l^&<1ZKaH*!__sl*$yBO|KIu0M*n0@K8ZL0T@SeHp|fpc^+k**8PF z5K~a;DR*hF8%tG`6RJ=2e7p&f8MN@*)z_P=L^$p0SQT%P zlXPgrt`gI65k0-OuyEZaS>`ZFnOGER97X-A(f~giLqd zAe``x>EwtlR$p4!E-TxjqM|Xi5aU)_=Q2SNp;ihz z8#_U{h;V(l-r64?Hha)Lq2=;3&qY7V81*|lZ(0L8H^z>U6jGWE#;9Lvo`z#E%qS($ za3P_Y+Yl*wRCddu0xeJEhGq&KmaTsgHxNm9*xu=^VBqUD z+!2{vE+_OKjije$B84XFPj~MRIuA@=NA|U_jIeO|tdT9ij=?Jk(ER)|!wP$V;6Ykz zz23 zeZT4Dj(2M@>pBy92i1i$&^uLsohJMwQ-yJRg0wLBJ_A{rC=s?`Xl)&q0SZW98 z?nCF?^MZs?+BQNF4C4fe6qCAqBEMFvvV4~#bRC5eIHfQK7r_j5ZK>Dj_A=>d<}!W2Le9>ha*P)9D)C zQ#95C2>a9$AwpyW5`?$Q^(2w7{7co2POAFNnryelR z$K`Jx9@bBthzmFZA&l3G&Ckr8%1C059?%sFyGfj4Bt3vIUtSZ$FrKW^x!n$8hin46 zQ*^E?Erb`>2us3rJ}h?)ymIbpSQtL?IDOh^c_I4{ruZ?0PY>4)X+whdf#G>*y_zLU zr-7)mQexZ$HOmwh+7IATg;SN5Mx`s^HfS|%uFF$&r7JBo7d9A+c`8c~I~+O#8@`*e92O~5R{$bn>CSs}W;K|2&S6N#$FxV4X)Y+IH8Dcs6Y* zA^s5d4ltN@iGC0sZe_704|m(;%>n>pw`5mLsD9sczcLrXw%c8}KA-~kn(s3HQ-)hu zO;0X!JpxNuA6ia`8u~jo z3^!X4c{0ehTZ4D4)^SFEl%t)6jm2fQ5W{BTA+!maiBiJ;ClKH_=H>x&zFc}<9^MM~ z$A^XS7Et$b59{>QR7$9Sw~cJ5JEF+*EoS!t9bPpL_i^w%I5?tVEqa`yyx`+8v?)C< z<%IZCim4zRHx!VC2l{XX?l<~{CW15ZPpD9bk~H&7~@-12CU{L3Kqu&?4r4eFnSM^ zPz4hY|LT-7Qt;u{#Lg^GM8lTj5HzzvhA8b_?q#U`$LZqjkWI8>IXiOlC-m{ELg4k6!&uMWSEKLOmxw@?+K~1 zQQ7m2$_VRp(7IFLz1hInZY{=t-{whv-_(FqasIFI! zhK$iSl5^G)Ty3)%QYV&={wYsNzDFzEpDe%5f&_-zH$8OX&rI#pk4Zbc~x*-mvS_=m^IDfr^2x*1X@RYTI& zaj7lsZqBz+S33=XtRJR3we)Y*b!R{2i6GH}BkoRlGpNpv+<8=Xh|S#d{KT^a347dj zpNn=jBDuQHMVn3Q6@q0_ib^Jssm4+AASrD+A)%qsawW)LczJ>9MpRpDJ4tag zd&z%NkFz?M-cl(~R4gia>BpDRi&F5*K+z#`|Izg~PnCnM_SA4uR1fI{$~P^r;LNBM9$yJKT{gQwbX&yAj7&X#pIcUu)oC!Mdk`Xqyr)YwG( zL!b5d8XW6v&vsLNiXEmCC@rClGbgZznzSJu@oIFrI<|T=JiF7gRf$IeyV)ugN+()1 zSbb9IHs#6*WmKwJ_4m;?aCJ!;{ngG4Bp&VMCIj~IUUlR)AbpN11KmPnBIJoS+-QrT z=v19p^6pAmdQIMt$D&S5hLV3X-ISxYuzIif8JY4`@u{piOBeO9 zEoYt1*faAI9TXYryrH|#iwdjr;;-|fzSGCa__q{qa@I>3V~o-_c9z;0uYDuKi)Fu3 z<91y6uJYpvtMgN+c|6~lHBDPRTkQs`bmj5JtaIBd*e*&}TTq>75!+X4AGBbl1zUf$ zbt~hCi7yKmw=yfBPBN29qMI6PFQ=MSVU*t`UT4Wgh0zSBqc3ZIR+}TWRp|-kD|NB6 zj+2kE6_T`7yoB_3wwAjnUL=T4u%i4^rKOG-bDh-;6IE!+_+&{th=-L}8G+2{W0lz< zG^RPu8y97^3ZxU3{yCcCxSVyzgY@>xCsMKQO!D9)Z}xFsFA_efJChEkQ);L`8fSlRoOmut8s&D2uvnh0BV>BM(Vn7*Ht{+b^GVbys+p-}Os|ti0(-&WqBydL z)!SVvFlsQk9xrnf9s9;bSEwVf&Pqkcm-VD}MB#$R>Rz5zxOURjit zP}R?T^v`_a)#y-0TAP_ON2wL@&bw4TBI9(6t0U+2-RImMht78;bF1ust7j~Y#9mcL zS)N2mopR6Wf;PfQV~4bpc`Y~Tq6^v?TIZ#J^V@npMu&;fz-pC#`bRM_(&*&a5iUwU zdsyc=6{_NsB+Y>#>P{z<>F7Z*D`C&resjvU{mOU0{W`SHN_Le!@}TFI+lv|_>&A35 z?*+|V6g6JKof~h(TF=Mm%TO1TI`oc(p}mg5AbGg*S~|h?F)+gFY?L!{XM9)BXn2lP z58teXCv^|wFY2Q9x-g8t$P+m?D`$Iv>kGpfht89}Fr0s@=cB9cZPccl%a?FrSoZ{D zTg)ZooTsSk17!u*xhdootL!9s7-3~QwNt!`+-DVVu8Ul=2s2g*uWTf&zf7V$V?S68 zRXU*eda5qkCp{tc*4OcTBS%1nyr}b2eW@-}b*Ad>Md`7YM=Kc%9V8?2$&lAco4l4n zBLhZQovG6H@9Ih2$yiw1$d%q->fm^1fFVoHGu8D~;~4x@L}x(7CmB%xx1W+$RowVt z;wqbqs<b-ZRIS_EtjciBIk( zkGaB}7>op^Sy_6lLwt;{jP4KV1&QddpMpGBoO$nZ7CLUOI4h)1KeyEi zZQT%^=kkD{`0zM$V3Gai=i*$pht=s-w11~IyG49Nw6S=DF`r+Kb8sl#&Ro;hjvf#! zV^JN))y0lhfvkjyL8VA1i29Q%Q^Mq#K;~2!%YjK3u-6kO!|j73oM*H|nbgy^4rV28 z#G;aKMdu?G>lU&?P_UZL-kiE-OjxYBeuP;kBo+p42E{p#w2SN67F1`#ST4Dhj!t&2 zb=~sYut<6Ib?jgl*R2&$C(*$ALT#yW>yqL0(!(e1qmj~#q6+N@Iic9vN44Rq zrHD<4ltER}&K@WCaGAVLDm*7HZ#2g+xbwzQ8i%Vd_81D&IYpR>k@Cxp&V z$$`eqE3f6zWnPeKAu^Y{w9YGerJl?YdeQUB2&I#(ZhTVP-(31%N61zg^-i-bl6gj| z*fi%OanP+&OM=sZ=g5OZoz#s<2h*7-r9Y}%FsWJXT(e`)D4)GkrK>g>sS-@5T1!$@ z9lne{3gBiyBe$%!ZtQK(6QL?aq?yMv3C*hK$=Vdo>)J&t~Oymabv zszn%;*f!GJ7SoMU69GXnL*y*#5X2=UuXfPm3OK@6a{h#oG-*jxAWS>zhv089dW?5n*EOfBfh-eorn9k5T6YAkl8rpT7DjzJj5vHeWnpZ>{ zc8Rg&>XNsbNNlk>Z(%MTEA3%*e$;|lIzPHfLCR`WlODco&Xac@749uwb#J#v#R#f1 zP()?Q_{wusjL&Mzt@0le#_VU^?0o`lH%8Z3CKiuJNpzv{k_hix@a4#Q99*qT+6Z(kWIj zKB)v-usom)?2w@Xa@%FN07aB^(@3tQgGh=4>+UYahGXx!xVuXbon|Tdr%KRx%v7n# zS5mPut2RdSf>on7{^))4by0P<0_v12T3@L2sa?o7_ND)2gN@&?xz=z`E10kJ><2Nl z!Lju&hI=NCL1(Feu_j95zmoy$=AU>zwTqj-3Z#=M%(m)o^gy!>t%I=?iSs;`NuAQ* z;@CckBgymF2&Pk$0$(o8BQl!%(&=f!5Mkp zHRhtKdz!A>dF@YG1J{wBtNkf~bYfW~F>4iFqP8Beye8bcc)$uXBdr(~rS_OimXzyH zJ@`>$V!|2s3N;zs)(+&kKFo!w99!h(`Y;3Pt*Y!<;!4eV=sc{3U)#>ZYH@ckW*IVF zN?>R(b-*idWr31R>v}a{8l6mN6e@ z)kK#V`p@bfZC$p~&7tbjj-*{&wq`h;b^)D+RW%Q^J;_?fnugKfAQ_kINX^A5ZUxlI zRj|HL8{1XRH|Ze@QVpIA{Z)_L{6=l8b*tq)x?VK~7q?m?luo(4@ku3X6ji$Y&zy=) zMaW!7#yY;wT3JpaOzQaRU^?k?`lCwQT=`AfYv`XEp-ySzAaG_`HDWUg8Hg@J{vG?> zMUB`Q+OrGPz&)vi5~m|O##gqttXV41#o~h_8x#jFwS8 z>WZ*6Q(3J7M&pSrs+Wx6M)t5eeP8=`>bS{UH>D}kc!j78%9FhGm*t-Igl6Z3V*JRl z^%8B8rIHa$XCPzuV5$coLIOf2p%9OEeTtHZGOjN84 z`ISniG=#{sI_X=XTb1p!s(dw`dVdAmyK0uZkLhndbVL$tXdwS zjIRCrd4=?q5;G<=q@VHTM@Q~jxHuzJXScO+&d79L`#v{Cm2;l_hRIUPvQC=HjWnq9 zc1%^n2~h(H%$i;hhdq|o6>bB@;kIsb@+_L@8DBDy)M>4Q>Fnk+%6xeoZNc1j7;3c>}H1=!E_FMbSx?t9Xm?P zrEI5q&bRe4dyb)Ajlf=4bd#hJOea}EhBUFJfsv$MUofaY!>nW=EZ2v9G^{;sRw8s< z1n$x%n7O$f&Ge)+4zMr35THw4DIKhbF{20A>(#z49>&aYI?>AJXSKyvLy`Hd^ioM_ zWp+Jth;12=o>m#!?$~Ho88E_mGGKgG8R$%m#uN}468_AtUh5X`wYsN^TYQvxZdZ*m zjVDYS7NsO*Rke(H-;Pqm z%|TSN#dQK@_1tlqF!j;*cb{u!g0qi*UNMy?4qbJ!|9Zpn4eYBKAtiwo(H7x5ftF&PgGq+ z>W5Oh9-#i9s(JR?STrxB_r9K8Wy%PrGgZ@!M`cP+BQXZF8U;y!jF0FP=+n!`SN-xC z&m7TF@|PEW?lD5?TogAx8ONkkXa8qam^|lRRBV{DeaX$aM%wsDvI~#v7E@n^B9OsqlEm^IBv0_@gY%Fq~>8P zW#E`p;7KdN*#qDvtpszOt)kHh#yVSUk~OT2OT!#+WsTj89??$@DXafD_MVHeo1Tz* z2Uhfaqc&73J@!?Fj8{fH>$(^b9NzzhJH4Y-D4le9P;7dN>k$mN zb6zcyK$2lm;L`fzI;P^_!p zq4A=dW`xp-);2z=U24qQv~}MZlSt(kvVL6^RXnNTq~@K-DimdTW$BrE(R>)8bUrE= zpHx1qdr-7dpy)s82VC}m^(5uB2(ODLDQo%N(t6=t^L0FOYMI>}`f*Cn-pFA#BS{Y{ z?IOl=<1%*pA(0**qg+V@!!TIN7?4WC~V{_x)AkO6oGw!E~yX^hcFw z({L%IWz3N*#4B-^ui!Pbgk5agYNLE}99~yjZG_Y5my?}qyj7MHysP;ko(bKu-9{IV z9+_)Zbz{OQ!o$_OKr*20?0_6f<>u z5gr@L0*;Oo&_xk$gwpvbV|-HC=@}%$W@TS9U`5^xp{DQ~=K=fM>T5DWcu!V$(T{Hh z)M;0+zEH{AUJ*g+MpLn@N-9|*eXCUEL1>t>uyM21DwIySv=N6&*7Cp zjy>(>BqNYcvV;sh*UKjB5xZ=fRHWs;5)?i{p3S{BGSLH_tBoX-b!Z3i$$Q_b=4EF| z?%B1n(wEnq9yh6~P&!pV-eD_SMQIi&E$3z@ygIAY%I+*(Pw%umKeN1`99pX%E>;HV zICip&ZbZW9v@7s$BW3wV6~?cH$xCMBL}sXh9+%)VNXG9vk8MO;^otiD1k&l|jpc)p zaDX&w)5qxbz``$*aj(+BbUHrzqbH?jG@pA8W@Jb*hL*;vP&&bK#wV4YZD^?;Rx0-` zDWlbMnB)3XFW7S&MmHys3S}Kg<0XBZM4p#_NcV_2#LQ~Pw&I1V2bu{VSR9k61NAo9XFydwC_EXKpbF?R+ zW^GJm#HxtK#)Tvv`r)D?YKGI9$Y#xn>}D=-=P62L-7L8a+qcurC9Oi~=u1hD8+(*X zS}K?{Dd}&V_afW=<@a(RoFg+_?O!vbPP?L!5^;GBv0S@8fkvJ>%O9kR++2~^zS;4~ zs9&j(N}fX-BXM|=<;;@77_vMU9dWEO#o!F%r48l-q-P&kuat4@dpG;Q3aK+v+VjF1 zl^M_5YP{x+Shf1t_{gAmN4jpRJOt87mQgXN)Vex{Y)GH8Pt)$6mLb~)QvnMN@v6|f z+F&!JPCb_l8rO08*t%Oi2UjgP;n+Sm=d=o?lc;7aTA{YExw*KpG2BKC^ww2NuYM=b zg*zg`c<+k+x^i>j>To(2H6<6ud{(Y4Pvd!GrRKgj8X1@7b@?g~^;(}t5 z)4;BS=^RwnA5{jtiU9eOEVRiBHf50#bF`LqR>XydOZn_wVRms=SOIkw3R_>OOmtK6 z+6J3=c6w+;bfPVGv(t4ronB2@U0lVZlCvK0`8Fzs7xSoXHQEyOvM74leb26^pTKJ< zgv6dyHBNOeSmPl|>5nQKy6;9!y{AV-PJfyC67G2PV!cSmsqUiwL>TK(%fIz;9%!}~ z@^|ANM`ISv3dS|)m9W<|dshitbLFDe=F?ti&4gx4Nn3 z1JCs;GrQz!bDUbTDM?w1IrkjpT=Zo%PxM#9#DfpIzpSsN}&M!kk` zayoM1V!^;?#i6rQ&MJ`JMq<9vvqj}L!#&QJ^g^|z zzxfIqqoKud!yBPykJ|I%W~)^wotY96tJyT7XF99OlFE@Rx)SHycxiO?I-^`{yb7e# z%hR10WN5P7wq#tgXDG5&crsa6?yRak!oFoLPF-72ot%&DE49bvK}g-VTiAxDST!~I zv88AVk8C}Vbkv%>9S{f@*j=e+!d7VeUujm|OP(d4~rlgR_Ih#l64`r&BLtepWf?X+-+W zMv#OcuYmNRl zo5U#9(*dEpw9%MaVKuEMg!b1%BOM94Xj=D#)M-}rd}AC`8UrF(CDf;9X#Xna2uxjF z^d3i(AZ?B^MAMNAH=At)(^)7Y^DKKB-z0H=k>tGJZ|9~SBtKyE1FcTUT7H}>)8J;o_!cm%kp}%f(9dKZH|&*e3t(hJYVSu=^vNMt~Hn0Fpr%p~>-uJhvS^|i`VfTSP~ zu|6$21w3OkWTFg3$A^die`H7p*BPp3W=ManGGu>3;<-%Sx1^R6C(AIXTv`*nit37m zAJND&duXVy44C6K!@nITM+0}qEm0&oqt!eqv@}xaCMj6Q)czeOmOh$}GbuL6S<#l5 z-JD4hOy{9Ad618Zc2Z!|Ue(oTa6LlBam-YBdDx|pwpaCBol~@WPmbiTMzktVZOy5mDnsUodA*OU$3ink zM$$QNSuP$69f5UjN}69vj#Q+^@sj;vm8{OfQ!?$fFqezl7n^FW%~i?xq!NBbecSsNQSDABmI?BMP)KSd%!yvGN;3P z1xxq2Famq!!uZlWL8S@E%!}~{l?&@8Cd&-VI3&k4;^H_Mp>(=cjZZ2;S-OWlF{1@j z%^uK={w!y#`$bg-tU^Nmkf?uBB2KE1(7|*TO6rd)4?ShQHls(QPutFpM6I?|`MI&I zp<}~cw53`Bb;7>Z7b2hmVoowFeiqa>D4OEAVfXDg)cizDb^b zrNxxzPc>G9C8Ig*(#y+iYtOjOK3KYu^{bDdW1HZmlP zg>tw2}fgI z1eFQLp?pq@-ZO&g)QtC_8j(3S&T5fQoRX`JbB5Q+Wp8P|FP;-dHh|K>lRM7@73bc3 zPU-N>z&f?eGF3{SBx)Dt^!%7NFvyZnjve@%YavlUokF2jQb}TBJdydBqm-@TXE{9K zo^kCx=P|-NoK7w$)k-5K`(!lRuVoB~>&k~$Fr7wG($FQCwF+QY^WlI4md_s0w(h3A z((#--{If&r)Dx}bS;+HqJ<7hHHOk(e;B#7y{&x&I(HtF~F@E2+m9etR!$Y5OmAl$X zdua1G>UjgsE4-*Dqw=bTa3-az`JK9D&%U+KspLL45}kgYZc))yR03X2hdJeyr%|ke z=Eq3g$Plk4{~y71%Gv3{VHB+ytL(w-RuI+1?o3I-{jUm( zS1_GI-j?b;mg;_LHLR<0IiD54e0{Tep|fLuKIc+-qS!jg6JYdwqwG2xAzyo)MYNic}hjyo%K4R2H3~bQW^kO4M%p`l1~5oJ8uSQpRhK z92@QCB(jCo>E&q4i?P&JbyBZV@=i>KxEL=GPDWx@SabiXhc6>KS+$LXTZR~u&!{+= zl_(jbEM0c8d-VKA`?gDz45jvZMs&CBR#=^#BE|yVah`ja%Aby3c6wghA^IQpuIJP? zo*7stT~b~_+}4=o8P1}~)`HYD#Tz$N4uq#zk{XcAOmtpVZi*!xPA8i_z|-sNxnN~R zfOl0}exKw8YXmblsF{q77$60Z6s*$5&pr)&#$x534KhMkcbrvjHb{rl$@(Upta=2H zPB2*~P&KAywT?@o-i_yUs5=7b#7p$hJsB-+JsIj!vM+Mv+2n*lL2;2@MZcR(*5P!j z8GA}JJ{_YH8gqtZRrCD)f+G@7#eUA#I0ET-i^#KtXPqvtM_UJtEh$+}Q*QgtGcn1e zbReBn4z7BML+z`!En2FAJ+qOi#6{?HT5xSabkzBDZB*tU#>*46Y(;nVj%?Xg8I50i zzaOXk|31~N06Ox*-PO_xIthl0$ntK%VbZG_t6tHX$q10B_xw5igPssNjbh$usJ?V_ z8635z^f8y-i9{VLNgfCtNGF!xJ26|2LKaTD*vQZXKbZ&SxJ;k(9BvPz(3mtb`Q$5LKjGj~54)9OL*7zrxjKBBR)JR4$ zHIhuGhIcYGlaWl#B$KJ>olLD{BvUKNWNLXQQ#%>S)J`&)+RkMBlX2Zhm}e%_*1B$p z)p6bU`@Z;fBVm$E#_PKA_kHo}M#3bSjMsJJ@B8A{jf6=u8L#Wc-}l9@8wrzSGG5n> zzwe7*HxeevWW25$f8Q6sZX`^S$#`8i{=P4M-AI@ulSy>l)Oq2{)8DsFlF8KJy2)jg z(801s!9ZEd&pFlWIRhgShtx@CY;Hv*DP*&Lm$)wToX0_DC>^sjSv>3JDH{?$IjdBK z>s617@*fa3T%LzUe^`EUT4{+1caHsaF&Th3RC=YX*s2&24PKZ!MGD!Z^ztT7dGU&~ z(&u7K;xl8`QJHaPVyQA|p^(RJ$5C(czw2f4w8Eq+zh^~ni_J_SUH|w2GB(B$`*Rw_ zo*TOnlNocGkT9=_!u67uYZZ?fYr0VN8uR~){OXv@nA6bE?ua*;`Bm|lv1Z^?qE4zt z$=efFT(;Q5;+RD0$ak`1*KwJ#r;~hpw+|V(ZF=r&t@=j{6N2SKe+by2R%=ps{ zh^I-D=j zt=pS!letH9OrDsT$LXA9mE4$(n9P{d8$C46Oeb@Hm{FN=XV70b>ut%ra;&(_*wd=U zM90of=Do&<$c#6gJWtDNY>tSNyRVIy%$PHU$>Y0pqj;}{oXk6oEjBZSjMCW0$jtb2T3_`u54QbeZ=JldC2^!?dTGL=yza`$ykDqz%ve*)dr};S_c{G>&$}5D zjTvV~Uhilu32EOW$=vgv$jtaN%U6Sm4WdQAgOX1QoYq(fx$&xqta#NlmH&%)jfl*6GsXlZ^hQCR@zX59l1mo$Q!ZOlHjK<;>ufT8_P)%qz!?%8WY= zYnM7APUf|);xS{*92*+fPhXIZ$dh?J+M}D1GDXT1{AVU6Pqflv9~2`)Kx4eF&gRK0 z3!M>~>7XYhTwOEX^wKB7#jh6Y(!{zQFU9^m=q;YHTTxpBq|MTSkgTI7D@D(h9uVEQ{ z11sQLSOwp~8u%X8!4I$jeuPc%6KsK>VH^AcJK$H?1;4=__#O7aA8-KvghTKb9D%># z82ke#;9oce|G^nJ2j}4;T!Jfb6|Tb#xCOW2F5H6$@DLuu6G)LpNC~MS4WxtgkP$LL z7RUjUYK>;WTg`o%(gW^yEN@hec&Z{8D4=`AqavY1O~uB2!p{8 z4iOLq(GUZ%5D&v(IE;W%@EW`>#1DQ$tH=>fQ_&THp3R!3fo{i z?0}uH3wFaE*bDn$KOBIAa0m{=5jYCR;5eLslW+=7!x=aW=ivfeg3E9fuE7ns3Af=6 z+=Kh@5FWu3cnT@g3aKCsq=od50Wv{m$O_pY2jqm@kO%TXekcfqpa>L&;@|@%p%j#X zvQQo>KqaUQzTgMdpgPomnot|+Ks~4r4WSV+&>un|6b8Z|7z{%o0wN(AhC(dF!7xaG5ik;7gVFE?jDa^{9J~b+ z;BA-$@4{qwAEv+uFbzJ08SpX8ginO{!Lvm!+RylEE_@F2;R{#@U&3Pe3YNmxupGXD zmGCXBhVNi4d=Km42iOQd!e;mhw!+V_9e#nG@GIEg4B=}(m@8u2$>-Z zWP|LG6LLWw$P4+Q02G44P!x)R50rpXP#VfYIj8^?p)ynfKd1`T!5?ZuEvN%^p*}Q# zM$j0VLNjOqEul5Efp*Xy0-z&whAt2Y-Jl2bgx=5x`ohc54_<}-5DcL(00u!A41sWn zgeVvaF%SpwkO0GBB#eU5@H&ivu`mwC!vvTJli(eg4DZ1dm9D$>7435JII0>iVG@OC6a2_teCAbV%;Tqh4n{XTMz&*GR58)9! zfv1o%y^sphKw3x-86Xp6hOCecazIYV4S66RaC=NbQ5=ucCC=2DG0#t&^ z;0u0G4XQ&8s0p>94%CDC&=49y6KD#}p#`*p*3cH(K?ewcPS6>;LLhX99?%PV!%NT? zUV(lP1pOfdLSY~bg26BZA|Mi?VJO5x91Md57y%>UH5d(Vz!-QF#=%=K0p5m5@GeY- z_hAZr0Mp<@m;oQdO!x$5!)GuDK8Jbm1uTFsVG(=g?vx| z3PNEh0>z*>lz@^@8p=R9C=V5(5>x?Ss0!7!CLqp*25355q^Zt@Dpr>pJ6-v0z2VX*bTqIUicmM!yj-E z{)EHu7aWDZ;W+#QC*fZ>4gbMeI0qNtB3y?j z)P!142kJt7XaJ3%F*Jo{&;nXQYiI-QpgjaYN9YV)AP~Ai59kTKp%3(hm!TiL3jHA% zLSX<5f-o2Y;SdQ?Fce}S4&osJhQml01*7407z1Nr9E^tvFcBufJ1`mEgDEf-ronWW z0UyCkm<6-pQ5jm18ZR&tcMM-5jMeQ*aBN& z8*GOiuoHH{ZrB5RVIS;=18@)y!C^Q8N8uP8hZArTPQht7183npT!2e(8Lq-LxB)le zHr#=Ga33DRBX|N&A!Q~Z6{LZ*kRCEXCddp~Asgg?oRAyxKt9M11)&fWfuc|xe4r$h zf-+DR%0mUH1eL)T{Gb|ChZ;~5YC|2U2lb&LG=e736q-W|Xa%jIEwqCU5CEN^GjxSO z=ng%g7xadgpf9`v{U8YXLkNVzKo|srVF*M(Bt*kdh=n*91_>|%M#5__8s300@Ft9d zw_pOi4U^zqm<;d36!-w9!G|ydK8Bg_3CxDiU=Dl^^WY0u0AIo)_zIT5*RTw}ffevA ztb*@g4SWyl;0M?MKf)&X3AVt`unm5J9q=pcg5O{d{0{rz4>$mS!Xfwzj=Owte01crr zG=XN&99lvvXajAbJ#>JM&cnw~MH()Hh3FF}{mN2k*mF_yDHEhwu@6471=9_!K^a zx$rs6hc93udHTi8oqjwkPWg!PRIp$ATQ*H0#FDFLs2LOK2QQmL1`!p<)8vo zgvw9_{GcjS2Y;vuwV)2vh5FC{8bM=d3eBJew1n2s2HHV;2!M{z8M;6qbb}ty6M91* z=nF4HKX?`TLokHG02l;eFa*LO5~5%z#6TRxLjnwkkuVBI!|N~x#=&m=6nJAuNK$umqOEGFT2PU?r@A)vyNE!a7(F z8(<@Bg3Yi6w!${p4m)5c?1J5}2lm1~*bfKbARL0ja0HIRF*pt<;3S-a({KjP!g;s= zm*6s7g==sFZo+N21NY!QJcLK^1fD|5tU@YC18E^WWPnVN8L~n)$N@PaH{^kQkRJ*{ zAt(Yxp*Z+JNhk$npe&S!3Q!3ugD?0&HK-0XpeEFYI#3VlLqli;O`s_>hZfKZT0>iC z2OS^)IzeaX3W3ladO$De4KG1ocm?`F5cG!-2!(+#2nNFth=53lhM^D(aWD)LU<8bW z*I+cf0b}4z7zb~`1b7=J!MiXS-iImh0ZfArVFr8*GvO1M4WGdr_#EcJ7q9@nghlWb zEP=0K8GHjP;9FP)-@zLA9@fDRumOIAP4E+JfuCU;`~o}RSJ(x=!5;V>_Q4-;0RDtS z@E06`zu_4C11I2LI0gT~88`>$;UZjuD{vLA!wt9vx8W|_g9q>s9>WtzkxfVmsUZ!d zgY=LQGC>x|3fUnCBxSp(<1Zf2aYq zpf=Qnde8tGLStwG&7e87gjUc7+CqEi03D$dbb+qW4Z1^5=mmY?C3qQLfmb02f*}M3 zz(5Ft!4M7+5Czc?1F;Yf!(cd!fKl)oybf=`Sa=i0!&@*B-iCMJU3d@PhpF%ZOotEQ zBls9*!6)!3dYjH2eo=;T&9mi*OmPz%{rI zH{llCfxB=Y9>61b3{N3Nb|Dp{hP03lGC)Si3|Sx>WQUxP3-Ul-$PWde5EO=@Pz-#a z1eAi(P!`HT1*iy>p$hmxRj3aBP!noF9jFWSp#e04#?Ta+K?`UJt)UIHgZ2;r9icOH zfk5a6J)kG_hCa|2UWR_~D)fh72!#PK2*O|pghM1m!BB{SIEaS?7!D(06pV(~VGN9g zaWEbxz(kk?@4#eu52nCWmy6X@Plel9cn;Ls10?X9@K}1&;PzVY`Q78sJPy$LpX($Wj zpaN8c%1{OTpej@cf2awypbpf9`p^IxL1SnN&7cLegx1go+Ch5=fR4}^xo5k!!Z;WY6JR1t zf_Gptya!WYDolgvFath2F@=E6Lf4+~%+EP}@IU?XgT&9DWw!Zz3rJ76d5g59tO_QF2c4+r2N9D>7e1dhTnI1VS^B%FfNa0br8 zdAI zLtAJE9UuTYL1*X+fzTa#KriSGFF{{;1^Ph{^oI}#g@G^#2E!1DfJlgjp%4pkFboo4 z1dN2&U^Kh|W8h5~2XDaycpE0cyD%Bvhbiy@OoI<$27C-N;S-n*pTQjX9Ol6numHY< zMer3Yfv;g1d;=@sTUZ6(!5a7;*1-?30e*x{@Dpr-pJ5yP0z2SW*ag4A9{3&h!5?q{ z{)9vD7aW1V;TZe_C*WT=1^>YrI0xt9B3yzia22k@4Y&oj;V#^R2k;Oc!xKo6TSy71 zAq}L1^pFuUK^Djg*&zqyg4~c7@<9P82!){t6ocYW0!l(@CAKX@?qR^hN0-z&whAt2Y-Jl2bgx=5x`ohc5 z4_<}-5DcL(00u!A41sWngeVvaF%SpwkO0GBB#eU5@H&ivu`mwC!vvTJli(eg4DZ1d zm9D$>7435JII0>hO_`#<|PJ=Uibq>zM zMYsf4;3`~)8*mG5!(F%s58xp@h9{6BkB|~lLmEg2=^-Ozf-H~~vO^BY1-T(F zqu@1o9o~Sk@Ft9hw_qZ?4e!9a@E*JmQ{e-c4j;lt@G;DSPvBGd4Ccb;Fdx2vh43XT zhOb~Ld=1Ot8(0b7!fN;q*24F&9)5t0@FQ%7pI|He4BO!s*a^SFZukxM!tbyj{(yt< zCme>q;3)hJ$KfA13ID=r_z%v)Ik*59;WAu-Yj7QI!Y#N1ci}!ffJg8co+QtbmoU3Rc4!SPSc5J#2uDun9K97T5~g zU_0!9ov;gb!yecR`(QsDfP-)d4#N>R3di6$oPd*X3QofrI1A_D0$hU2a22k>4Y&!n z;SSt``|uDR!4r52Df0=bAPuC2^pF8EL1xGb*&qkxgxrt^@UJoD`*XEp&fL90O$mrp(_MJ zcjy7Vpf|h(ec=`82SLyuLLd|d!XOw7Lm&boAsU84EX2VuNPrPA5?+JR@CJ;5H(?yS z1ry+Hm;~>_WOyH@zy~l5K7<+YG0cQdU^aXPbKrBB2VcMf_!1VuSFi-WhGp;#tblJ} z6?_M4;ComHKfng~5jMe3umygGZSV{1fL~!3{04jAci0DizybIZ4#8h=1pbC&@DH4T zf8iAT2WQ|MoQI2W39i6ZxDGeq7Tkura1R~`@q-_VR3{(v)l*23Uq}V1AuXhX43H5r zLl(#e*&!$7f;^BH@?j)P!142kJt7 zXaJ3%F*Jo{&;nXQYiI-QpgjaYN9YV)AP~Ai59kTKp%3(hm!TiL3jHA%LSX<5f-o2Y z;SdQ?Fce}S4&osJhQml01*7407z1Nr9E^tvFcBufJ1`mEgDEf-ronWW0UyCkm<6-p zQ5jm18ZR&tcMM-5jMeQ*aBN&8*GOiuoHH{ zZrB5RVIS;=18@)y!C^Q8N8uP8hZArTPQht7183npT!2e(8Lq-LxB)leHr#=Ga33DR zBX|N&A!Pv}6{LZ*kRCEXCddp~Asgg?oRAyxKt9M11)&fWfuc|xe4r$hf-+DR%0mUH z1eL)T{Gb|ChZ;~5YC|2U2lb&LG=e736q-W|Xa%jIEwqCU5CEN^GjxSO=ng%g7xadg zpf9`v{U8YXLkNVzKo|srVF*M(Bt*kdh=n*91_>|%M#5__8s300@Ft9dw_pOi4U^zq zm<;d36!-w9!G|ydK8Bg_3CxDiU=Dl^^WY0u0AIo)_zIT5*RTw}ffevAtb*@g4SWyl z;0M?MKf)&X3AVt`unm5J9q=pcg5O{d{0{rz4>$mS!Xfwzj=Owte01crrG=XN&99lvv zXajAbJ#>JM&cnw~MH()Hh3FF}{mN2k*mF_yDHEhwu@6471=9_!K^ax$rs6hc93u zdHTi8oqjwkPWg!PRIp$ATQ*H0#FDFLs2LOK2QQmL1`!p<)8vogvw9_{GcjS z2Y;vuwV)2vh5FC{8bM=d3eBJew1n2s2HHV;2!M{z8M;6qbb}ty6M91*=nF4HKX?`T zLokHG02l;eFa*LO5~5%z#6TRxLjnwkkuVBI!|N~x#=&m=6nJAuNK$umqOEGFT2PU?r@A)vyNE!a7(F8(<@Bg3Yi6 zw!${p4m)5c?1J5}2lm1~*bfKbARL0ja0HIRF*pt<;3S-a({KjP!g;s=m*6s7g==sF zZo+N21NY!QJcLK^1fD|5!a^!Y18E^WWPnVN8L~n)$N@PaH{^kQkRJ*{At(Yxp*Z+J zNhk$npe&S!3Q!3ugD?0&HK-0XpeEFYI#3VlLqli;O`s_>hZfKZT0>iC2OS^)IzeaX z3W3ladO$De4KG1ocm?`F5cG!-2!(+#2nNFth=53lhM^D(aWD)LU<8bW*I+cf0b}4z z7zb~`1b7=J!MiXS-iImh0ZfArVFr8*GvO1M4WGdr_#EcJ7q9@nghlWbEP=0K8GHjP z;9FP)-@zLA9@fDRumOIAP4E+JfuCU;`~o}RSJ(x=!5;V>_Q4-;0RDtS@E06`zu_4C z11I2LI0gT~88`>$;UZjuD{vLA!wt9vx8W|_g9q>s9>WtzQA9`ysUZ!dgY=LQGC>x| z3fUnCBxSp(<1Zf2aYqpf=Qnde8tG zLStwG&7e87gjUc7+CqEi03D$dbb+qW4Z1^5=mmY?C3qQLfmb02f*}M3z(5Ft!4M7+ z5Czc?1F;Yf!(cd!fKl)oybf=`Sa=i0!&@*B-iCMJU3d@PhpF%ZOotEQBls9*!6)!3 zdYjH2eo=;T&9mi*OmPz%{rIH{llCfxB=Y z9>61b3{N3NQ6UwihP03lGC)Si3|Sx>WQUxP3-Ul-$PWde5EO=@Pz-#a1eAi(P!`HT z1*iy>p$hmxRj3aBP!noF9jFWSp#e04#?Ta+K?`UJt)UIHgZ2;r9icOHfk5a6J)kG_ zhCa|2UWR_~D)fh72!#PK2*O|pghM1m!BB{SIEaS?7!D(06pV(~VGN9gaWEbxz(kk? z@4#eu52nCWmy6X@Plel9cn;Ls10?X9@K}1&I0ApeG57~gz`t+`{)01c4$i|xxCB?=DqM#fa0_n3UAPAi;2}JQCy=7JkP=cu z8b}A}AtPjhERYqlLk`FVxgjs)g91zpbfNz_Rs-3LMP|~U7;Ivhn~<2`oK%@GQ0w>LJ$N) z2n>LM5C(%G93mhJq9F!iAs&Xoa2Nrj;5B$1-hi?2CX9!-U?RK?@4&n89=s1z;RBcs zAHqlQG0cKb;8XYv=ECPNAHINv@FgsUuV5*B4a?yhSP9?4YWNP;!uPNqet?beBW#AB zU@QC#+u;}33BST__zm{L@30^KfP?TS9EQK(DEtk_;U72&|H5hb56;3lxBwU7GF*Xc za2;;KEw}@B;XXWoNAMV)LJA)t6{Lo=kPb3HM#v0VARAS3-zG^G=j#^6q-Q`XbG*M4YY&y5C9#a zGjxGK=mtHYC-jCs&=+2Ye();vhhPYW0Wb){UM99wxv@WOxszz*Lw9(_sdD1T$e4%!W^44$OslFdr7cLRbWgVF@gSWw0Dp zz)DyJt6>eSg>|qVHo!*M1e;+CY=v#G9d^J@*af>`5A20~upbV{=3Gg;df_Gsuybn|01DFOM!VLHrX2K^h8$N?M z@HxzbFJJ+D35(z>SOQo|GjI;h!$r6RSKumKhZ}GUZo^%;2M^#O zJccKbqNI=#QbQU@2k9XrWP&V^6|zGP$R)%N&Mh+dDKB5;hXPOt3PVvS20l;%N6ZwAasKs z&=Yz?ALt7&LqB*G`a>{;!T=ZqVK4;3ArhisD8xV<#6toMhmkM}M#Jkc2FAiT7!MO* zB20pJU^2W1Q(!7ggXu5>K7yGr3ueQoFbC$sJeUs)U?D7m#jpgH!ZKJ6D_|w8g4M7F z*1|ei4;x@3Y=X_O1-8OA*bX~jC+vdVum|?SKG+Wj;2<1=!*B$S!ZA1wC*UNUg41vY z&cb=P0GHr0T!m|J18%}?xC8g#K0Jg+@C2Sh%2GlqNCRpAA4m7J1O}o60W{gzwr$(C zZQHhO+qUgwlZ|cLws~{zJe=z4Z|JH)Fa$?PghCjEMR-I&Bt%A3L_-Y3L~O)CJj6#r zBtjA-MRKG-Dx^kQq(cT|L}p|`He^RmkIh035R6-S0 zMRn9bE!0L`)I$R_L}N5TGc-p_v_c!SMSFBWCv-+vbVCpHL~ry#KlH~y48jl$#c+(k zD2&EfjKc&>#AHmtG)%`#%)%VZ#e6KlA}q#IEW-+{#A>X;I;_V=Y{C|7#dhq#F6_o$ z?8AN>z(E|s5gf&FoWLoZ##x-h1zf~sT){P5$4%VA9o)rzJisG7##21Q3%tZ@yumxX z$47j^7ktHc{J<~#Mu5bB35Y-ljGzdH5D1CT2!n74kBEqbD2R&ah=Ev$jkt)11W1U) zNP=WYj+97+G)Rl|$bd}9jI79p9LR~>$b)>ykAf(KA}EUDD1lNajj||*3aE(6sDf&! zj+&^2I;e~KXn;m&jHYOY7HEmqXoGfWkB;bsF6fHx=z(77jlSrI0T_tE7=mFKj*%FJ zF&K;Sn1D%`jH#H08JLOLn1gwkkA+x-C0L5(SbZ4cLgy*n(}?j-A+rJ=lwX zu^<28AP(aQj^Q{?;uOx{EY9NsF5xn+;u>z?CT`;n?%_Tj;t`(UDW2m6Ug0&~;vGKV zBR=B`zTrE5;uroPK$5@wgFpy^pa_l-2!+rHi*Sg5h=`0Rh=%BhiCBn(xQLGgNQA^l zieyNElt_&ifX8V zny8IBsE7J!h(>6Frf7~9Xoc2ji+1RMj_8ao=!Wj-iC*Y~zUYqu7=*zXieVUmkr<6J z7>Dtgh)I}&shEx#n1$Jxi+Napg;$eI&R<=ZsRWQ;Q=1vF`nQVp5rB6;SJv6JwD(Q zKI1FC;Rk-=H~t`C(!czJzzBk12#$~lg)j(<@Q8p&h>WO+h8T#6*ocF8h>wIwgd|9c zgh7u@=(kO#+D36M$ges_t>ZpNQ zsExX)hX!bf#%O|OXpWX>g*Ir5_UM34=!~xDh92mN-sppV=#POIgdrG;;TVBY7>%(Q zhY6U7$(Vv^n2wp4g*lju`B;EOSd67uh80+e)mVddSdWd^ge};L?bv}`*p0o|hy6H! zgE)jEIEv#qfm1k*vp9zfxQNTRf@`>ro4AELxQqLEfJbc0;NzIWl;_lP!W|;1=Ua;HBk$7 zP#5*l0FBTXP03M4JFyFUuowSgKmNl( z9L5nG!*QI%DV)JsoW})R!ev~=HQc~W+{PW;!+ku&BRs)VJjV;X!fU+6JAA-Le8v}i z!*~3|FZ@A(6rrBDWCQ63dg36)V5)ldU9Q5$to z5B1RyjnD*5(Ht$%3a!x=?a%=o(HULP4c*Zbz0e1J(H{da2!k;c!!QCPF&bkq4&yNq zlQ0ESFȽ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 literal 0 HcmV?d00001 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 0000000..d0d0c04 --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: a5ff5133c51a7a327095b30a5b17bce1 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 0000000..9e3b18a --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,20 @@ +.. EOA CMS components documentation master file, created by + sphinx-quickstart on Thu Apr 2 08:27:12 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to EOA CMS components's documentation! +============================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 0000000..3f280f5 --- /dev/null +++ b/docs/_build/html/_static/basic.css @@ -0,0 +1,768 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 15rem; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > p:first-child, +td > p:first-child { + margin-top: 0px; +} + +th > p:last-child, +td > p:last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +li > p:first-child { + margin-top: 0px; +} + +li > p:last-child { + margin-bottom: 0px; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > p:first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/better.css b/docs/_build/html/_static/better.css new file mode 100644 index 0000000..ab4be3f --- /dev/null +++ b/docs/_build/html/_static/better.css @@ -0,0 +1,314 @@ +@import url("better_basic.css"); + + + + +/* main styles */ + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 100%; + color: #000000; + margin: 0; + padding: 0; + line-height: 135%; +} + +a { + color: #008; + text-decoration: none; +} + +a:visited { + color: #208; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a.toc-backref { + color: #000000; +} + +p { + margin: 1rem 0; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 1em; + margin-bottom: 0.5em; + color: #000000; + line-height: 135%; +} + +.body .section:first-child > :first-child, +.sphinxsidebarwrapper > :first-child, +.sphinxsidebar .search:first-child +{ + margin-top: 1rem; +} + +h1 { font-size: 1.5rem; font-weight: bold; } +h2 { font-size: 1.5rem; font-weight: normal; } +h3 { font-size: 1.25rem; font-weight: bold; } +h4 { font-size: 1.25rem; font-weight: normal; } +h5 { font-size: 1rem; font-weight: bold; } +h6 { font-size: 1rem; font-weight: normal; } + +/* page-level layout of containers */ + +header#pageheader, footer#pagefooter, .related, .document { + width: 100%; + max-width: 60rem; + margin: auto; +} + +.documentwrapper { + float: left; + width: 100%; +} + +.bodywrapper { + margin: 0 0 0 15rem; +} + +footer#pagefooter, footer#pagefooter a { + color: #000000; +} + + +footer#pagefooter { + padding-top: 2rem; + padding-bottom: 2rem; + text-align: center; +} + +footer#pagefooter a { + text-decoration: underline; +} + +/* header styles */ + +body > header h1 a, body > header h1 a:visited { + color: #000000; +} + +a.headerlink { + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +/* code styles */ + +pre, tt { + background-color: #eee; + color: #333; +} + +pre { + font-family: Monaco, Consolas, "Lucida Console", monospace; + margin: 1rem -5px; + padding: 5px; + border-left: none; + border-right: none; + font-size: 0.8rem; + line-height: 1rem; +} + +tt { + padding: 0 1px 0 1px; + font-family: Consolas, Monaco, monospace; +} + +/* API doc styles */ + +dl.function, +dl.class, +dl.method, +dl.attribute, +dl.data, +dl.classmethod { + margin-bottom: 2rem; +} + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #aaa; +} + +.related.bottom { + border-top: 1px solid #aaa; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* sidebar */ + +.sphinxsidebarwrapper { + padding: 0 1rem 0 0; +} + +.sphinxsidebar { + width: 15rem; + margin-left: -100%; + font-size: 0.9rem; + float: left; +} + +.sphinxsidebar h3 a { + color: #000000; +} + +.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +.sphinxsidebar ul { + margin: 0; + padding: 0; + margin-bottom: 1rem; + list-style: none; +} + +.sphinxsidebar ul ul, +.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +.sphinxsidebar input { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + height: 1.5rem; + font-size: 0.9rem; + margin: 0; + + background-color: white; + border: 1px solid #ccc; + color: #555; +} + +.sphinxsidebar .search { + margin-top: 2rem; +} + +.sphinxsidebar .search input[type=text] { + width: 90%; + display: inline-block; +} + +.sphinxsidebar .search input[type=submit] { + width: 4rem; + display: inline-block; +} + +/* paragraph-level markup */ + +.admonition p.admonition-title + p { + display: inline; +} + +.admonition p { + margin-bottom: 5px; +} + +.admonition pre { + margin-bottom: 5px; +} + +.admonition ul, .admonition ol { + margin-bottom: 5px; +} + +p.admonition-title { + display: inline; + margin-right: 0; +} + +p.admonition-title:after { + content: ":"; +} + +.note { + background-color: #eee; + border: 1px solid #ccc; +} + +.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +.topic { + background-color: #eee; +} + +.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +.warning tt { + background: #efc2c2; +} + +.note tt { + background: #d6d6d6; +} + +.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +/* responsive styles */ + +@media (max-width: 820px) { + /* kill the sidebar */ + .bodywrapper { margin: 0; } + .sphinxsidebar { + display: none; + } + header#pageheader, footer#pagefooter, .related, .document { + margin: 0 1rem; + width: calc(100% - 2rem); + width: -webkit-calc(100% - 2rem); + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/better_basic.css b/docs/_build/html/_static/better_basic.css new file mode 100644 index 0000000..bf43230 --- /dev/null +++ b/docs/_build/html/_static/better_basic.css @@ -0,0 +1,455 @@ +/* basic.css_t from Sphinx project modified for sphinx-better-theme */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 0000000..daccd20 --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js new file mode 100644 index 0000000..d3acadc --- /dev/null +++ b/docs/_build/html/_static/documentation_options.js @@ -0,0 +1,11 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false +}; \ No newline at end of file diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/jquery-3.4.1.js b/docs/_build/html/_static/jquery-3.4.1.js new file mode 100644 index 0000000..773ad95 --- /dev/null +++ b/docs/_build/html/_static/jquery-3.4.1.js @@ -0,0 +1,10598 @@ +/*! + * jQuery JavaScript Library v3.4.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2019-05-01T21:04Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.4.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code, options ) { + DOMEval( code, { nonce: options && options.nonce } ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.4 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2019-04-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) && + + // Support: IE 8 only + // Exclude object elements + (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && rdescend.test( selector ) ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = (elem.ownerDocument || elem).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( typeof elem.contentDocument !== "undefined" ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + } ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + // Support: IE 9-11 only + // Also use offsetWidth/offsetHeight for when box sizing is unreliable + // We use getClientRects() to check for hidden/disconnected. + // In those cases, the computed value can be trusted to be border-box + if ( ( !support.boxSizingReliable() && isBorderBox || + val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url, options ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + +
+
+
+
+ + +

Index

+ +
+ +
+ + +
+
+
+ +
+
+ +
© 2020, Klaus Thoden. + Created using Sphinx + 2.4.1 + with the + better theme. + +
+ + + + \ No newline at end of file diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html new file mode 100644 index 0000000..1b37d90 --- /dev/null +++ b/docs/_build/html/index.html @@ -0,0 +1,106 @@ + + + + + + + Welcome to EOA CMS components’s documentation! — EOA CMS components documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Welcome to EOA CMS components’s documentation!

+
+
+
+
+

Indices and tables

+ +
+ + +
+
+
+ +
+
+ +
© 2020, Klaus Thoden. + Created using Sphinx + 2.4.1 + with the + better theme. + +
+ + + + \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv new file mode 100644 index 0000000..5dd2612 --- /dev/null +++ b/docs/_build/html/objects.inv @@ -0,0 +1,6 @@ +# Sphinx inventory version 2 +# Project: EOA CMS components +# Version: +# The remainder of this file is compressed using zlib. +xڕ=0 FˆHl1t@&V[)+ +ظ$jP[~6;~~lm]y֢ 2.+o4] bA#HZ! Yoؒq;; 5Y'%9V=(#~l'՗_ЌU)&r$Nno=()9 HF ~AAN4@1s \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html new file mode 100644 index 0000000..9ed5834 --- /dev/null +++ b/docs/_build/html/search.html @@ -0,0 +1,100 @@ + + + + + + + Search — EOA CMS components documentation + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+
+
+ +
+
+ +
© 2020, Klaus Thoden. + Created using Sphinx + 2.4.1 + with the + better theme. + +
+ + + + \ No newline at end of file diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js new file mode 100644 index 0000000..b8b020c --- /dev/null +++ b/docs/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.index":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["index.rst"],objects:{},objnames:{},objtypes:{},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to EOA CMS components\u2019s documentation!"],titleterms:{CMS:0,compon:0,document:0,eoa:0,indic:0,tabl:0,welcom:0}}) \ No newline at end of file diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html new file mode 100644 index 0000000..678a5b9 --- /dev/null +++ b/docs/_templates/layout.html @@ -0,0 +1,11 @@ +{% extends '!layout.html' %} + +{%- block header %} + {%- if theme_showheader|tobool %} + + {%- endif %} +{%- endblock %} diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..53d792c --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,71 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) +from better import better_theme_path +html_theme_path = [better_theme_path] + + +# -- Project information ----------------------------------------------------- + +project = 'EOA CMS components' +copyright = '2020, Klaus Thoden' +author = 'Klaus Thoden' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.intersphinx', + 'sphinx.ext.autosectionlabel', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'better' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + + +# -- Extension configuration ------------------------------------------------- + +# -- Options for intersphinx extension --------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/3/': None} diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..9e3b18a --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,20 @@ +.. EOA CMS components documentation master file, created by + sphinx-quickstart on Thu Apr 2 08:27:12 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to EOA CMS components's documentation! +============================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..2119f51 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd