From aaeafa62116cff5da62ae12c1ba72b2af78d70a8 Mon Sep 17 00:00:00 2001 From: Scott Davis Date: Fri, 24 May 2013 07:43:30 -0600 Subject: [PATCH] Updated build steps. Added Embedded js and demo html file. Updated app.App to app/App. Removed .pyc files. --- BUILD_STEPS.md | 24 ++++++++++- src/EmbeddedMapLoader.js | 52 +++++++++++++++++++++++ src/app/App.js | 2 +- src/index.html | 2 +- src/index_embedded.html | 26 ++++++++++++ ui-tests/tests/__init__.pyc | Bin 160 -> 0 bytes ui-tests/tests/basetest.pyc | Bin 2590 -> 0 bytes ui-tests/tests/test_feedback.pyc | Bin 1941 -> 0 bytes ui-tests/tests/test_find_address.pyc | Bin 1931 -> 0 bytes ui-tests/tests/test_geosearch.pyc | Bin 2705 -> 0 bytes ui-tests/tests/test_map_click.pyc | Bin 2623 -> 0 bytes ui-tests/tests/test_satellite_dialog.pyc | Bin 1267 -> 0 bytes ui-tests/tests/test_select_providers.pyc | Bin 1445 -> 0 bytes ui-tests/tests/test_urlparams.pyc | Bin 5617 -> 0 bytes 14 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 src/EmbeddedMapLoader.js create mode 100644 src/index_embedded.html delete mode 100644 ui-tests/tests/__init__.pyc delete mode 100644 ui-tests/tests/basetest.pyc delete mode 100644 ui-tests/tests/test_feedback.pyc delete mode 100644 ui-tests/tests/test_find_address.pyc delete mode 100644 ui-tests/tests/test_geosearch.pyc delete mode 100644 ui-tests/tests/test_map_click.pyc delete mode 100644 ui-tests/tests/test_satellite_dialog.pyc delete mode 100644 ui-tests/tests/test_select_providers.pyc delete mode 100644 ui-tests/tests/test_urlparams.pyc diff --git a/BUILD_STEPS.md b/BUILD_STEPS.md index a3e1db44..6960e16e 100644 --- a/BUILD_STEPS.md +++ b/BUILD_STEPS.md @@ -1,2 +1,24 @@ +For Single Page Apps +==================== - copy mxd's to hnas/serverprojects -- add analytics code \ No newline at end of file +- add analytics code +- _SpecRunner.html +- Bump app version number and update changelog +- change apiKey in main.js from localhost to server +- build.sh +- test in dist +- change apiKey in main.js back + +For Embedded Widget Projects +============================ +- copy mxd's to hnas/serverprojects +- add analytics code +- _SpecRunner.html +- Bump app version number and update changelog +- change apiKey in main.js from localhost to server +- build.sh +- test in dist +- change server to point to url in dist/EmbeddedMapLoader.js +- push to server and test dist again +- change apiKey in main.js back +- change dist/EmbeddedMapLoader.js to point back to relative path \ No newline at end of file diff --git a/src/EmbeddedMapLoader.js b/src/EmbeddedMapLoader.js new file mode 100644 index 00000000..68ba38db --- /dev/null +++ b/src/EmbeddedMapLoader.js @@ -0,0 +1,52 @@ +// This file is used when the app is an embedded widget in another web site. +// This is the file that loads the widget and it's dependencies. +(function(){ + var server = location.pathname.replace(/\/[^\/]+$/, ""); + if (window.jasmine) { + server += '/src'; + window.dojoConfig = { + has: { + "dojo-undef-api": true, + isDebug: true + } + }; + } else { + window.dojoConfig = { + isDebug: true + }; + } + // var server = 'http://168.177.223.158/SolarMapWidget'; + + var head = document.getElementsByTagName('head').item(0); + + function loadCss(href){ + // summary: + // Adds a css link element to the document head with the + // passed in href + console.log(this.declaredClass + "::loadCss", arguments); + + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = href; + head.appendChild(link); + } + + function loadJavaScript(src){ + // summary: + // Adds a script element to the head with the passed + // in src. + console.log(this.declaredClass + "::loadJavaScript", arguments); + + document.write(""); + } + + + // load dojo and agrc css + loadCss('http://serverapi.arcgisonline.com/jsapi/arcgis/3.4/js/dojo/dijit/themes/claro/claro.css'); + loadCss('http://serverapi.arcgisonline.com/jsapi/arcgis/3.4/js/esri/css/esri.css'); + loadCss(server + '/app/resources/App.css'); + + loadJavaScript('http://serverapi.arcgisonline.com/jsapi/arcgis/3.4'); + loadJavaScript(server + '/app/run.js'); +})(); \ No newline at end of file diff --git a/src/app/App.js b/src/app/App.js index d3530705..eed09f46 100644 --- a/src/app/App.js +++ b/src/app/App.js @@ -28,7 +28,7 @@ function ( SideBarToggler, PaneStack ) { - return declare("app.App", + return declare("app/App", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], { // summary: diff --git a/src/index.html b/src/index.html index fca628f1..2ab9f95f 100644 --- a/src/index.html +++ b/src/index.html @@ -13,7 +13,7 @@ -
+
diff --git a/src/index_embedded.html b/src/index_embedded.html new file mode 100644 index 00000000..58e84ec8 --- /dev/null +++ b/src/index_embedded.html @@ -0,0 +1,26 @@ + + + + + Project Title Demo Page + + + + +
+
+
+ + + + \ No newline at end of file diff --git a/ui-tests/tests/__init__.pyc b/ui-tests/tests/__init__.pyc deleted file mode 100644 index a91ce578d8a052dd95b4684c26ce76d4d812dbfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZSn%*!RH_ah*g0SXv_v;zXB8ihgOPZb@n}PzXZC$7kkcmc+;F Y6;zgR08O*W%}*)KNwovnSq#Js0Q}D;DF6Tf diff --git a/ui-tests/tests/basetest.pyc b/ui-tests/tests/basetest.pyc deleted file mode 100644 index baac2f3b2871695e21689476def729809a472fd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2590 zcmcIm-EQ1O6rQoOn`E2NQV;?OkP(Qus9E14C;^%jsR9=8CRAO7EU!JA%;G;h$N5p4 ztM-lyuHhNrhPU8(cmVj$csJ>$x!|I4GRJdf&YZtF=kvP%toQ!>e(SqL%pMo-&oInG zkQDz?WI~MExg#NFQOqaz(inJ@93h_jU zhocqNIP{mHUH^+`;7d$t734^b(^?;@x?SpE$z)1ZExQi(fg0~vi3hPJTEWWQ*r;7) z=*)kI7y0CeAaGy=>!6NMF1rciqmD=&_6J@f0-h|36k8qf6uT=T9Qs|>@HWT+QT0&} zjO#K^$8nMN8;TG5`{iMf$5o)&TEYSFgvU09`4xl^yX24`3lTX?r;eDq?7$N#l!DFjPifNCf>R-fT%&*xKyx(dq?9H_i4Rnv)`vVU5 zyk{Og@%(p=bdi=v{o%c@?hWqmeSOP&v>?Oc7eu^Iyho=WFG!s(aJBlm(Y5k_*htH1 z88C~h3W}2SoaGFQYshQd8EswP&UkprD*%1)vq?jILx`>K66bw)3NSH~)8NJS>8bwzXy zODy|ES$~c+(wpEXD3nNLDpv(XcCNkg?D(lcTGkc>=1dppMK2a%gD<`o1lg~Xu zOCUHgAr?H3>zglq@WK*vAG2T&uA9IlB~cn5Y7^{~NyBzc@NHdAVbTP5=dBqudXrFJ zCTQsx(7>~Pbz&U=w^wnD<~24Wuge?q6}h^$?DXVK*^_G+wwLGqyv?#7fN-;-!QK}n zXN^2>VOLDihEO(dGd?@;IbIuF+)z0@Xb7EEw7FpzGqaT)h4h40m{WpgA&Ye(dwFHK zVAv!T*E{fOgT3LB5pq?oOZ_Tl$sEhLK5P!&#RPc9X+Q!1U_dg5kqp?$VAXyNhCUw{ zETnLV6~iI7DQv-SXscjg{=)hKUN8<_z?g;Zy{zMFMNM5?grrv?? zGr+TV67r$8&bZi`f^=r@z!sXt2?DT`4P8|nA%A#oV;C-UAz$zMoI(2ukD?;ZRTL4+ zL{VO*O$Ii!b;{zqKD1T>dLN*;jF%~+BtW> zDFCH_85;}ZV4<75#bS1z6WezFTdZfc-#`1U(>G03l{NJnZLi6y*@eDsz?Zdur4d?l SciNn9aVZ;4`x>ATf9`)#zETeW diff --git a/ui-tests/tests/test_feedback.pyc b/ui-tests/tests/test_feedback.pyc deleted file mode 100644 index d593e98466991f223098a3d2a4228b4216595f59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1941 zcmcIkUvDEd5Vx~Q)8tZAar`^Dhp11HP?C3`=q`r}m5%Dz_K*lVENAVuPIm2RJ=-=C zZ{<7kF?iquz|3rt7Swy}X4e^e#y`)@Z^p^rd)*KJ{PL$vte*t`U*H#i!@=MyMJ~j2 zD@!qzyxtIbLllXaCPJD-SSjXBagMsC_(O-X?|g40}4* z!6V#1_?!$RiqN8Sb8DBdi_(#`W~Q^n)-|%3kjdvbAX@DR9yV=|n{oFMLo;y#`peVAIi#p9S3Nje>EEP(1dvyY5<*G4wu1sI6OFChx*$2#lbs9 z8(lkdVPOk|$a4pi3Ly9arKiqTwX|h=mplt^m(WJ-tPI!Dmhb_}_QqxvSQWF*HCw4HMip_MK`0qG%U!krA}Cg~!a+?C1&e0q6pi2^o}e^-i$}$A%mRSX zS1yjf3t2_jar~wXbA*lKNf|Wq>CL!uL$DE-?nbrAz-YNji86{IQkX(MZS2cWg$wl+lmh~nT!o~`h(H;|EumIL&QR86= zZwi3mc7@qxH`-#}5vD_0tgd@Ub!ll0{Se@j4PcjX5U|HWmjU-SfLv`v=Se)o@!|UT zS?3Om%msgDZ(tH``pz#asEg;A#AEM~t9?X>HCHbx(3hi&a23CJFKnuf3-PlD^nl0c z((2elCGpwMLP5+sD#{19j0zj0#@eRpI=j?<5ut;kBhP*~`|))=!rA}hGw$lW?Xw1a zqrE+N*T3H>9O!6MTtnk@9xmb@;$x#ObG`bi?}N8>FTpCegD0pZ<86W?D;=o?k3GwFWn4#kz=pD;m%4a0o+hL zJVIA-Bt($%y0BD7e2og(kEKXY|iE8(+kVwYfPy7ieLQuE3{NsT7n> z)@rV|a!<{Bs^}@(Q_Dy#V2{)vN?j@S%e=4bo+|q4qNnPgl~rmv-~sJr%Xje}ws(Ky zIioKizIML&u_$UA!gVMb_8D4ufDSvfj^Tj4YW6gb*gXqO&lYa36$AMPyrW@pjZ)^$~n zR^dE+bv>AoA363CAHqgl{LrjzZ6I{2rT1&vhnm&Z@4?pe9b`@*v87#EPf4~(@(_{$ zJ*TRsTbR%#H>)mb0QG}gvv>ee!gv$Ti9LoUTREDMj~N>3v&oi=7=I;Q;7BI#;Wtb| zUJ(`PZ!Sz;Re8g{!{lvUE#WpyW_6VoS?Y^P<3?lyO#k+Y1l$ERUT;hf+j3HYgH`&j zK9TpDB^-&cn*O(Erf`sC5{Q8>nE;ljF1H_wK?^0tMBHl>ZZh=!4BD`xa$9fkDzIgr@5~u?%7a)P^3oHT!Z*icOhpO274=h~1Gby~ll7?czjrhKpK7QgJ z;J=HD;Y%uJ5(y;ch^1>J3|CuNO>Wg;SX#T5tF6W5tlC0jm=d284fZE!Wa;*fy$4fw zBw84bwcN-;q$Kg_$|i{%@FZDPMN>kRvt({#r8(gY&~9{}>HxDBu5;jSpbz&C2VIb> z)cGWdh3(9!#yjFP&DT(5PL>AC7ExwUe&S(_DkBW#!_T{Xo>U}?AKGd@=W9>^IMR5d IZ%>Z&KfeLJ00000 diff --git a/ui-tests/tests/test_geosearch.pyc b/ui-tests/tests/test_geosearch.pyc deleted file mode 100644 index 705c3ff823170f0767321fca335703b533081c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2705 zcmcIm+ioL85Un2HVkaR{!Xg#{%CawBiP#UkAb}9MEYS*NmdWk|ei@Bt+Q~R`G1EQC zW|bhJz-RC~{16`ir>ZB8gAgw$_Ds2}`c{4FRJ9v_uJ?ZVW8;U2>Q4i|U*k1DL&SI# zr9|UJThUmF-J{f_tU==jDIV9Lv`JZu#x18eDQ#2Mp>YR#i?pKI3QaM$O}`S|5dApr zlI~I5p)-%lx1@VZ>$y{#P`}le zMur~g;#h}ebhfGK83)3?kI3)?D0Xl(V*CqMw5@kmKOQPeO@@?>HIQA2YAhI z5EhT3D;&wAnJ4~3nKfvJ6%^e_U(n(aY;5!TwXq|{4g-U|U{pM)ySxU5H@RolTUcGc zT_vE(b7G?7ejA>Q%wxz>+p5fW_Ky66K^D#jC)$pSBI`dhPtg1HL>Ie8P}xcHd1VK2 zGE3|WZobHKU0Ob=3G>)|@{i#*oTPfk#si~M9a$akMmkLs2Bg0RVI>yTT$errG!=*$-nS-7+5blQhPBFy(_4PV1EGc-|QZ5*B_ zW_Vac74L3_FUw+v)0*LaS%mQfzznNo*J=aPoeTi0Lv=8}^f?&JRkH~}YTJ9H9;r>$ zQ}5x8*b@)$f<>P}0gD`2gaU{+2q`?d7XE-aSFQmzcy-Kqfsx?<-+}LQU<3u9BjGdN zb{!%#9Fe0^hZaF&kNfPHzrh2T2XC1;_Br@NHm%3bNgH-1y_Vf!E zR*u0_ByrM1qt9X~f=qZ9!RJ3!Vd_gaY-Bkb_ad7V`N3(Jw$}{mHUBP z+ykO4j{yj%@Ao_JPgtt;HD$X?lojr9%tx3dRoKzs{}9Qsh67huMAUwt3E~O@mjR!X zUSjD#fA!iQ-EqukRPSnn&-cp%$MJpkh3i3H99DDGZ`7t+zCA;q*@7Ui4x-vtJr7kv z$pt7kNf6{=rh~w8J_JEl#8nDain7m>{f}5Yfw()0v>xOx;6Se6H7weyyV`AcH)=;S zBxew~%agk+T!MUd>7H;J-YR_i(HC+do+RJsLzsmKFJc??xA3 y-eDh$zQUq%L;HNgOPyy&`cRe-c?dA%Twl6~e8tzG;eP{bY7H5QZ{zWBP5lk9mSlhc diff --git a/ui-tests/tests/test_map_click.pyc b/ui-tests/tests/test_map_click.pyc deleted file mode 100644 index ea37ace74f4cdd39f5d985ddfeecc738c65a8ae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2623 zcmcgt&2k$>5bn{RB}Gn*O+pM*5yAl-P|O1WMeG0<;=r05P>Pyb?T#w5**|t>Wt$2o zQ^nJ8chBrj_t#(dw*TH8{`Kd_-$%6kwDJEXF84b`jGv;E zXu8%FO_lgtl(r~q)3i;B_q8eQP}Zes7j}n?qNGQ2?CsKTL{~&VPIoBoZ7uAq7y4ud z6!+;>i>fO!M9GlvP`R9cHXa}r`wu>+V+GZ-eQsuPWf!JuTwS$Lc`W8U%+1P*ADKw#4rr^rg1;+7~K3eLuD?2Gs=zSuayFkTyr(_^Xm;H)&z|~~DG;XaQI}!~5pN(5M{M2(SSy+yD zITXpdE=?8iVq+Try!1OTXH{|TOy&2X&ut!SlbX!rUe7MIjS-$a=!snf(8!M<9!K65 z`N_-B=1!iL6}2<|4sR_MM*Cv*5Lt~FV>t^U%!?}Xx3Kd(wEpX&dYpt8O>H`GI+M=F z_$LwW8MLG4h|V3ksPH}x7uFp;DWaMqbVuJ+MPec-$5j!=voMd3YCG}9!L^YZKxhf# zQF$3K7+idJ8-mnN4kZP~uf+pGpvX+`h7hNY zktnNTVPjKGD&y+ZTexVY3Q8J!_0Ut91IlZo63Y9{~T0maw%}Y zCkUj?)7{O2CebjU45hTpTR7iwHl+4jZ{qeXhbL{h;w~B;Jp`nnfa$o8afN|)5aus& zm5x~A+S%aBRXep@8^_2zic%9+lUeP3k^eW`%&~{;z(n!!+RT*dQMqu!-yDc)EdHQa$$hJsjtlxuk~bUTeQKW>931Y2l34eh81& zSrON%(OS43ybWLQ4#Xy4(Qc%>xI&D&W0LpOU@+)<25U8H&$2L0&!WnhJc3(3>#576 zGS{arW-Kqi$*@1*-R?|oPBh`twW1nK-6r3mq`TY={;{(s=JnYtH^bFm(-X#EZ8W17 z%xL(!I%-5Qc&cd0-(4OG$!&h2!HGB7dNeRBr}hEbIN(;coR{=%Y!@%$(1(+_NQz15 zeHgu*l!eXx=MT%GENcJM2+}dtuaESh8gi#F;K6+shb%sX*u;2q-S95X`2d&Ww&-rF%Km%-s><~7jStdhDX@1eS!26^w73!)os85Zm+{FQc zAm5y}e?)?^a6#ZAtBB#S5<|93B68;(%$sq)rtM#mKw1L660C?(G6pg>F>DB*fUDq> zLyqVVDQJH<;#$ju(=GfHk|(ul3WcgP73y~S6m|Z2hPy`33UfJC{y4-G<;?$ShaB8b za*L60&%SGPn~~C+8qXVK@49tgyl(L^>7}uS)RnHaMY-O|+evVxcaLPfuOmaS5NkYu$#j`*hwqRjidQ z($36Kdpf$7^3ayt*E?x;88goaJPQyHqGNFw1S1K9n32K+(;~|I5rhf;Lpu#g{6+eN z?iI#2mD)Xi@KYbo(47_}?9ip;=q#&@pq{`a|3H3$!u z(T&8NQID`z#!8t4W*Kv54RUkAy;fcyj5!$}$P-?B##0DSlM~!r9|6|$J(DkZ?w&!9 K#W;RA9*f^|h%zw% diff --git a/ui-tests/tests/test_select_providers.pyc b/ui-tests/tests/test_select_providers.pyc deleted file mode 100644 index 1ac5901a0274b79f1e8e5a861e66223a6ca985dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1445 zcmcgs!EVz)5FOiTT1pC{Dn*q*$}vJXxmTz{1rBhCAOR$Du{PcfZ0qbA&!iBkJ(W-7 zM-VqIFtaIcoA$y19PfB{W_ISi=XH`F8|y#6#jkTXyApmr;emZNn(qh-fKfe$}afp^$&A882EWE8_-*pYB9MxZu$JmrDk*&H(_zBxUD(+EzY3!Yd!j9BoT z=Ox#A8`paOCYO0%>Xv|R!ZEv8pH+#S#us6%Eu}Mw70@@tdlCl{O`ugc4kYw?*v*m* zJ2#niKj_q*>PcD|G?Z$q3jYD`a;%F%|t*uBMYqbMHu5XR50kHh6=!SQcu&+jia= zlGB1TFU&GOe;8QYlNM7|YDH>d3t}FDLA$Uv=2&Nq4XXw)uKZ^-72W6g#5$d^C{yDo z8_%;GF9(l^)KFuw&Trs0bZodGN+~{ z%V<3;re4nqUJgX6a|-{O$AG&*I4UAuGo}T!DIc>e>xj0&Ggka%Fx#-0IZO3opCfNL i5(*7&$p(2fQsDow2(TV6B;1q#HWV7IsFmz&wW8mf!E5~h diff --git a/ui-tests/tests/test_urlparams.pyc b/ui-tests/tests/test_urlparams.pyc deleted file mode 100644 index bd72965ed01732d09aba4d2878bf8b02b0516fda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5617 zcmcgw+j1Mn5uF8i14T--6pNOk#7u0FkYkVlhzn_lN_dH!R4K5sq)HXKSg6JBP#kEn z3-1hgsen()b3Q6xkWa{Kp7R08=^k7u%1M=rBC&&=p5C3Fp6+vckpB1l?BAb1{gW?x ze`$RG7MG6D1o${26yk7j?}$T(CeqCX*|Bbrm<7`l_< zuR^>P;?IZELe7X_O1w#lq$#8j%?u4Vm% z(xH@X9(?IOf8ixwOApMa=XOZv1scp?jfDY+DVl?B(jrLl%>)@ul1ULv@Xb`uT38A* zX$baC^G!y$``H=1)F%&3;G*wcT)K*;i^brB z);cO@q=snN);meq=B-<8Ul>}ywQ!eKi3w@>nk*8|L&v9GrEB2wMRW{4a3*3aC7N(4 zR04r0BE?#kt>5Uw4#Q7(b6njSt;u5Ja z*skyYC0-3*G0Vzn+9n`}mDA%BqB|j))09GN2|CEiTlAqcqCpEIbcdHv9L$MJB=x+w zL`L5hmq_P3;&O(BtBIEawgX>kzS*bP-&BEE97*tWVNga!M_x@jf$hMj#UC3|3rm>{^II0tH@jv zM>=QX_EX*V#?`-kSKUN8KaPy2BALAV0NK3S3XXG$)Y9bQH)N@zT+%;9GmcJvK?UGW#L9V8=^#`)2%}Q~a}**H*JM)8}a9xdD!B6*kI+ z!bZ20FBU56l=4;~jQ z2i@(k0dMj$S}NL$&!YXdl)+YY8Qqs{+o`<9qxk#hZ?crME@6*LfWfHYhuA2WykUNZ zW)yDqRlIefAPi;wwolu*djgkh#yEaW9gtW*iNkZ8{*?*_?>~B9P6P&s1NKq zj+2%ltg;CChll~)?<5I$JXGHAb2u1uV0{WQ>id*-tk#E)QJR)zI3`!jGBPWanDfD?y@^2384)n$ z6UEbv5Y39fQn;m0XyeIS;sJOTeB8Iois!BP_CP#G3{BkJGavnruJrHHv14TX-j)7O zuJk`1?OWU7Q#j>5tu9#PcQIdog3YLDEKYp3mc%HC*T#6FG|Cg}%Ofdjd8d%?7W3Wp z{PHjwx5MypG5-pP*4^=%-g1xBO8H84qtq>xDuwlYzFRI0ai5pH^B9|@g#;sN-Qocv@sVz7X_K_=>2FD8KMBwPI*9fH{zBWn6 zavP+mKl%#KR0C%pIt7i?Erv`&|Cu_MLBE(WR0To!$GD+F*_Y~vkY3ps+JVD3Ze^c* zt!U~j*~h0P5Hf=hcc9gy^kdXjC(QWrT>6Nyy7m**HZEg47aByxmg5g-A!M-XALC?T z2+DZNQ7iBP58g(3U@lz7W_AGL%%$hp9kn=;e5U5w!2K1;=^WB&^DxB(yD0Gj74Mjc zS-8K2n)cA8V&{gb|1OzD)bC1j}ODloZv#sz|5)? z3A}T*(tCv00Vm&kps{F1C#Eq989Qne6Wpo=s)>)Gz~ay&icjS+DasqF!&sK_^7lMhqXMK82RMM9nX#p_<;^ zq~C4>#yA z*6+|!JyM;PJ>^Z{y+*a9JsOfjsG>iBGEeJ%P2;3Q6MTThvc12yyYQ6okgMc5XO2)Z J{h&SP{1@c_34{Ou