From a45aef0962b8c18ee4bf059b70d04615d97b2e7e Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Thu, 25 May 2023 16:46:25 +0000 Subject: [PATCH 01/23] fixed the line algorithm --- schemascii/utils.py | 105 +++++++++++++++++------------ schemascii/wires.py | 18 +---- test_data/test_charge_pump.txt.svg | 2 +- 3 files changed, 66 insertions(+), 59 deletions(-) diff --git a/schemascii/utils.py b/schemascii/utils.py index bc0bd08..c345dd5 100644 --- a/schemascii/utils.py +++ b/schemascii/utils.py @@ -22,7 +22,7 @@ class Side(IntEnum): BOTTOM = 3 -def colinear(points: list[complex]) -> bool: +def colinear(*points: complex) -> bool: "Returns true if all the points are in the same line." return len(set(phase(p - points[0]) for p in points[1:])) == 1 @@ -49,27 +49,45 @@ def intersecting(a, b, p, q): return sort_a <= sort_p <= sort_b or sort_p <= sort_b <= sort_q -# UNUSED as of yet -def merge_colinear( - points: list[tuple[complex, complex]] -) -> list[tuple[complex, complex]]: - "Merges line segments that are colinear." - points = list(set(points)) - out = [] - a, b = points[0] - while points: - print(points) - for pq in points[1:]: - p, q = pq - if not (colinear((a, b, p, q)) and intersecting(a, b, p, q)): +def take_next_group(links: list[tuple[complex, complex]]) -> list[tuple[complex, complex]]: + """Pops the longes possible link off of the `links` list and returns it, + mutating the input list.""" + best = [links.pop()] + while True: + for pair in links: + if best[0][0] == pair[1]: + best.insert(0, pair) + links.remove(pair) + elif best[0][0] == pair[0]: + best.insert(0, (pair[1], pair[0])) + links.remove(pair) + elif best[-1][1] == pair[0]: + best.append(pair) + links.remove(pair) + elif best[-1][1] == pair[1]: + best.append((pair[1], pair[0])) + links.remove(pair) + else: continue - points.remove(pq) - a, b = sorted((a, b, p, q), key=lambda x: x.real)[::3] break else: - out.append((a, b)) - (a, b), points = points[0], points[1:] - return out + break + return best + + +def merge_colinear(links: list[tuple[complex, complex]]): + "Merges line segments that are colinear. Mutates the input list." + i = 1 + while True: + if i == len(links): + break + elif links[i][0] == links[i][1]: + links.remove(links[i]) + elif links[i-1][1] == links[i][0] and colinear(links[i-1][0], links[i][0], links[i][1]): + links[i-1] = (links[i-1][0], links[i][1]) + links.remove(links[i]) + else: + i += 1 def iterate_line(p1: complex, p2: complex, step: float = 1.0): @@ -93,7 +111,8 @@ def deep_transform(data, origin: complex, theta: float): try: return deep_transform(complex(data), origin, theta) except TypeError as err: - raise TypeError("bad type to deep_transform(): " + type(data).__name__) from err + raise TypeError("bad type to deep_transform(): " + + type(data).__name__) from err def fix_number(n: float) -> str: @@ -114,7 +133,8 @@ def mk_tag(*contents: str, **attrs: str) -> str: if isinstance(v, float): v = fix_number(v) elif isinstance(v, str): - v = re.sub(r"\d+(\.\d+)", lambda m: fix_number(float(m.group())), v) + v = re.sub(r"\d+(\.\d+)", + lambda m: fix_number(float(m.group())), v) out += f'{k.removesuffix("_").replace("__", "-")}="{v}" ' out = out.rstrip() + ">" + "".join(contents) return out + f"" @@ -126,7 +146,7 @@ def mk_tag(*contents: str, **attrs: str) -> str: del XMLClass -def polylinegon(points: list[complex], is_polygon: bool = False, **options): +def polylinegon(points: list[complex], is_polygon: bool = False, **options) -> str: "Turn the list of points into a or ." scale = options["scale"] w = options["stroke_width"] @@ -155,20 +175,23 @@ def find_dots(points: list[tuple[complex, complex]]) -> list[complex]: return [pt for pt, count in seen.items() if count > 3] -def bunch_o_lines(points: list[tuple[complex, complex]], **options): - "Return a for each pair of points." +def bunch_o_lines(pairs: list[tuple[complex, complex]], **options) -> str: + "Collapse the pairs of points and return the smallest number of s." out = "" scale = options["scale"] w = options["stroke_width"] c = options["stroke"] - for p1, p2 in points: - if abs(p1 - p2) == 0: - continue + lines = [] + while pairs: + group = take_next_group(pairs) + merge_colinear(group) + # make it a polyline + pts = [group[0][0]] + [p[1] for p in group] + lines.append(pts) + for line in lines: out += XML.polyline( - points=f"{p1.real * scale}," - f"{p1.imag * scale} " - f"{p2.real * scale}," - f"{p2.imag * scale}", + points=" ".join( + f"{p.real * scale},{p.imag * scale}" for p in line), stroke=c, stroke__width=w, ) @@ -182,7 +205,7 @@ def id_text( unit: str | list[str] | None, point: complex | None = None, **options, -): +) -> str: "Format the component ID and value around the point." if options["nolabels"]: return "" @@ -215,9 +238,11 @@ def id_text( else "middle" ) else: - textach = "middle" if terminals[0].side in (Side.TOP, Side.BOTTOM) else "start" + textach = "middle" if terminals[0].side in ( + Side.TOP, Side.BOTTOM) else "start" return XML.text( - (XML.tspan(f"{box.type}{box.id}", class_="cmp-id") * bool("L" in label_style)), + (XML.tspan(f"{box.type}{box.id}", class_="cmp-id") + * bool("L" in label_style)), " " * (bool(data) and "L" in label_style), data * bool("V" in label_style), x=point.real, @@ -238,9 +263,7 @@ def make_text_point(t1: complex, t2: complex, **options) -> complex: return text_pt -def make_plus( - terminals: list[Terminal], center: complex, theta: float, **options -) -> str: +def make_plus(terminals: list[Terminal], center: complex, theta: float, **options) -> str: "Make a + sign if the terminals indicate the component is polarized." if all(t.flag != "+" for t in terminals): return "" @@ -268,9 +291,7 @@ def arrow_points(p1: complex, p2: complex) -> list[tuple[complex, complex]]: ] -def make_variable( - center: complex, theta: float, is_variable: bool = True, **options -) -> str: +def make_variable(center: complex, theta: float, is_variable: bool = True, **options) -> str: "Draw a 'variable' arrow across the component." if not is_variable: return "" @@ -319,9 +340,7 @@ def is_clockwise(terminals: list[Terminal]) -> bool: return False -def sort_for_flags( - terminals: list[Terminal], box: Cbox, *flags: list[str] -) -> list[Terminal]: +def sort_for_flags(terminals: list[Terminal], box: Cbox, *flags: list[str]) -> list[Terminal]: """Sorts out the terminals in the specified order using the flags. Raises and error if the flags are absent.""" out = () diff --git a/schemascii/wires.py b/schemascii/wires.py index ecc1130..b46207d 100644 --- a/schemascii/wires.py +++ b/schemascii/wires.py @@ -1,16 +1,14 @@ from cmath import phase, rect from math import pi from .grid import Grid -from .utils import iterate_line, merge_colinear, XML, find_dots +from .utils import iterate_line, bunch_o_lines, XML, find_dots # cSpell:ignore dydx DIRECTIONS = [1, -1, 1j, -1j] -def next_in_dir( - grid: Grid, point: complex, dydx: complex -) -> tuple[complex, complex] | None: +def next_in_dir(grid: Grid, point: complex, dydx: complex) -> tuple[complex, complex] | None: """Follows the wire starting at the point in the specified direction, until some interesting change (a corner, junction, or end). Returns the tuple (new, old).""" @@ -115,17 +113,7 @@ def next_wire(grid: Grid, **options) -> str | None: raise RuntimeError("0-length wire") dots = find_dots(line_pieces) return XML.g( - *( - XML.line( - x1=p1.real * scale, - y1=p1.imag * scale, - x2=p2.real * scale, - y2=p2.imag * scale, - stroke__width=stroke_width, - stroke=color, - ) - for p1, p2 in line_pieces - ), + bunch_o_lines(line_pieces, **options), *( XML.circle( cx=pt.real * scale, diff --git a/test_data/test_charge_pump.txt.svg b/test_data/test_charge_pump.txt.svg index 115782c..e72f24f 100644 --- a/test_data/test_charge_pump.txt.svg +++ b/test_data/test_charge_pump.txt.svg @@ -1 +1 @@ -NE555U176215348BAT1 5 VR1 10 kΩC2 10 µFD2 1N4001J1 -5VR2 100 kΩC1 0.01 µFC3 100 µFC4 10 pFD1 1N4001J2 GND \ No newline at end of file +NE555U176215348BAT1 5 VR1 10 kΩC2 10 µFD2 1N4001J1 -5VR2 100 kΩC1 0.01 µFC3 100 µFC4 10 pFD1 1N4001J2 GND \ No newline at end of file From 9c4b808ee1c4e86d6ac0e0643605dae6066edb8b Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Thu, 25 May 2023 16:47:27 +0000 Subject: [PATCH 02/23] release 0.3.0 --- dist/schemascii-0.3.0-py3-none-any.whl | Bin 0 -> 46840 bytes dist/schemascii-0.3.0.tar.gz | Bin 0 -> 57185 bytes pyproject.toml | 2 +- schemascii/__init__.py | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 dist/schemascii-0.3.0-py3-none-any.whl create mode 100644 dist/schemascii-0.3.0.tar.gz diff --git a/dist/schemascii-0.3.0-py3-none-any.whl b/dist/schemascii-0.3.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ef829a35dba9d0caa2e009004f1587970f671ad6 GIT binary patch literal 46840 zcmZ^~Q*3_Sww-ir+qRu_Y}>YNyJOq7ZQDu5o_^PwHShQRGjn?`>(t&=yLOd= zGzcgv004jltcJ9!S#1jeZ2|)Tk`Mp@`oC8vBXbiQ11BR33wk|03tJ0kJv};mj}Vn{ z+f4?BkM6m!_M&VJ!=Y{Hp-60;q? zS#8q=AxZ;U;-b*F)DmHbt_2Kh>!XZ8;zZG*O<#SFogQ&;YM0?`HC}!*`mulK;KP{z zukjK*Nh%`gi48Vjcg=^`^HQhoBqe&^L1ET3(p3YGT+?hopJTU(AvPRa7;u03P=y32HL5is)PR!ge@?ewb#P_5lk)|rZ8RzoEu8mT#!yoNtm|#FjmHWmnT?M1j~()KdVP$K>YMr981H{i zdKwzZv)}X|qp$`iafpb(VWBAzXGhC~;@~{(*!3SSr<*am@%(>koG%AFT18YrO&~Sn z_dT#nNJ0)N-En+NbEOPQxwM!je=`{dfv=DhOS%a)th{;9w50J~Bv7JCmnDY+A7(q` z@d%T`cNI6P#~K-rz0^IVa+`4))~$6;nec`Ud@*Yl_VqmTgm0ZY7`OjzSj{nIWv$?z z^_`VkB|4K!=8LEJ6|jz4b?nrPkl)3{GQ{)Op6_7py8XeaaX{-Ij9) zhv8xrB*@`seE;k9JB#ZGjdMq&56V=WDMTukfYTA~I~RwXiPP~+%ffL%W7BT+^2;~x zy4P50^>TCCv~lEdx=u7oSl;O>(jZ9m7`c_?nZCqUzU?~VGU=cW@^=YIRX+YpX18_l z`3;|8dwtK9mEV9Nl#zqD*|WZxZFElNuI)?-;|RNBRgLEXOY+lmCLMWaDw=$wdg$^! zfx`a-2N2yhHEInfHjRI9C;s4 z)(cGtpFB_lIWarVZx>6uK55%loqT#~acU7K#+tx;N@mn%j#1EroI7XH#A|6@vsG3V z!)F$h`UbKlq|HzYkC5y#M+ppw@jacct=2dt{Jy4fle2hJO_na?DGdL&oT_T`9Ajf^ z#p=rP^dG}EXMIO9${Uz>49$9cq$Z(9?eU~_!P=zy)LIRgaSZ~8cGwegswVms{1DtveQeKb{^~v8Buikb;<78prhS6eF-FHED6awb}Y}Hj)oQAF?D!UO@t2`KX-`Lon%sR<8odI zGI;(l+)x=R#z+{oG?p@au(9z0UkRDw!4}F>n0Y^z&XodC;vQ(pG%OsMa20u?%@{=o zqG4-85l?2PPPoZ&y1xZG*=;hi)AkdP`G@T7^!k*F6g|dt?zrFyj#fG0`I`e)H9Q2S zpNrw|zaxhq63@*aY;#EroY}Zt7%w45M%BI}Kv-nRO`XStgI&dFJj_KUDB1_K4W=z% zFRjQb6J8>>xA7FF7?)(S_l*gY6N-g6%Cjo>`;p2XI0a(9#VC%Q5u_4=alAv%e#hXY ziXsS2mySb_XI&yVZGJn&z+Wa|>`rU9=9u3jll*EzPk3YQnO$R7FG1ej>HC{Jc)4LQT7^ zeTVsPE^`0NMH9G!`EF1Epa}s0!2I9TY-DF+Z)a;_>+JN8oTt@goi^G2k+XXKV?nWO z;~&pOm1`1*Eoo~LLpL%M$zy?E6#d|W@PJ{J?8jC&3=+}tVq@;}f-X#58g#o|U;W`l z9_3Jq6={{!ME!pNcc=VBSxIp>X`5^QoTj1n{_E-NAqQ8Dny!?wVV>>Op}^9uD=i$= z+Gg@}U9ozpqu1m4Lg&fc;mzOS>E(hF!zWTF9SR^$H?x=lb4qb?zKYe$@y*P2zaioK z=7J)7sl$!_$u*Dva&W$K*QYjxl5C46&QT)zJ;Yx(#_Rab%~<)nu6}PL8tG|?+*QXQ zPY!|?IPZ{SHM-(0(IU|}QbQRu!8lQ}$d8O*hP8l6j9ku$Ly{#6Cs*>iXbn39it3hy zQ93oz+60)v@;D{~$im;h@zBD9PWmzjTdgs|oFgzb+FmmKcZrPRU{xMaWV8Caf>mkR zs;s>~kHcVc6h!OH{-}{ZBt~gG@H&;-2R@M1Oh#j6iZ!aQk8%DpX}-sd@s-+4TeI)k z+cD{PYJ>wvy5~+T9vO?3wyj3hb*svqux+QCC2=4cKoX}SIx3v!2kXL};0Of@fnd$i zrB+T-@U&$$@kWZFOOK%|astdLu0JMQ>SgLOJa`&mT1M(AN1OXE*nS!t8Z$L%tND}7 zU4Fi;*lp1~*wN(ZC>STyH)jTDrz-nl)X$%jx`TYz@O;bu@JSGKK;eN(RtBTQVQhB+6(Ib7xE`LyXCN}^z~ba1qeb3N@9OJ3#hPvd_axk z(Ckzl{vcKP#=4>a7y6gdsHu>)3ElvkUDW*&8sf%=V6Sa|tr=JI@fPiy4djc9S7X?1Qy4~ zt#Y!}%Kg^$t>7!^OppmnKvyD*$u9Vj(7Y)0+q9vK@&S*-&NDq7MsOw*1Oed!Imzb< z$aEkN>apL)bdz#P=dEvE5+3|FX@Q=7xA#Infpg6@W*T-T-BCyg3kJ_Fi%3;IE1wLG zAOWaPt&Ip{H}V>(L4Zj+t7Gyr_l+#1`>h%|?^Fr%<{zr_Dpb6KuG|dWp+~EHx2yqS z6@vUUd!IY=iRKX;ROxg>#~Fz!7Ci||rl+epp2D+IA}9jI;KCnTQR#P3@jdjgp$ihp zUVqXnSv2WwV}YXBYp-gvxqe-Rt!Y7)9hVipEO~hy2+NA>?ED&UFCG0A&dO8Ii+92AUb z$X2{<;}<+jh|=}i6BeAH>F}0}9^WI3Suo7Gta_OBpp~sD&E@drgqCkpVCvIq8p)~* znsPD5{xdV0Dw#;u_ESWLO1OIvF3pxeB)FAn4e+bTx|{MR0nJ3VAYYpI&aamB>hXTd zrpz`(AALwEvdFr%qOqQR#bhPAqB743xJ9xCewVOR&eeM4Pm`A@9UxPExNJBXgKX$Y z>yxCikw6JH(~1I>a0+(MmsK1-*LVs0HYkS@4YNl~=RlsJyMf*BrOn~+#+(kPxJqT+ zTfP5MUcPg?njs&4nH4esz#<6%5d8m9o}QzLt+9#YKjz#1eeJs0Hve5)DUd-xZy}vr zK4i06y0JLq&|qORdg;EHyIlEKfrNyyK!Q$kc%`E!e@CXaoEZ>~koZ^qkhgQ$mIN6T zJgA@N0mwfWV?9zOi$@NFME6)zF=3EUGEh^<%gGzPCeTuoeXQ6|UCuF};^3NNRUb%-Vo z=T_IaMD)?<`FNz`u7hz4mPc_2C!mw22EVSyyyLXrqi&QE=kcUZ`cyvn} z385C^#eytz$erut9tb~Sl~*ov2y%M(xcIq#1V)bD|Eyk$I?D}Y7I!O)_<8_@sVXHk z(Uikrds5yV`@juz7QuM_^tm<{SI}yfBGF0+NNFWl!*j8ef`QQq9GG-T1VM{kXz?;a zX#imdKjZ#66L@CKVDQ<;UHY3I=~cj_+-5fA5PAnPKo&xfz(Hya`WMJI(j2ZRWRz|! z9=*kgC+4&YxGA}TF^d@)NCt;9>^x3A8EPk2dv)&Sk5e{@1T?k?j#2uPz~i%|>c zM5fa}K~0v3bQZ7cY~au+9)0`rEcjW>+>>g)ppBmTGY)xISH>P_W)_qYToBV4(&m=Z z8}M)2>1Th}m}1DLuGDD%D6FtD+yw3yvtLog+On*N2ud}utRq@UUz*&7BwEE};E)En z;wTHUpw-EqQ(9OYICwTRr-QG)6wy5T6lg!$D36NR2u}}9t$L=u^;@FTudH`;X=B;W zGkc;1qlLpr%~c@b0;jJZFoPYU7b9WDP5v6|M^@{=7gM>^Yxq%pl3JuJkarOd^Oo)k zB{g_g&N^;6nW|1>?X*lc&)S%9_BZJ&+C^i}j0jh}N-^vOqSS?E){Yyikvxn~aL&_6 zWxi&j&~CP9V7H-8ru*Dvk#f#g$G8B2$H_jMW$6gJ(P%ZFl{m~81g4sh};2p7V5pmQ6(r2wZUT{zr@!vX9MtlHbUE0Il4vcYA{i}yZC*?jR|&xGPY*Fu$k|{B$1sLCM9Xr!G7sOc z-Ub9Vvov5mq{pvG{D|hgoa%?Im+%6l>K6l{f3EIa6+{`MiGBAUx!$ojJASQWb2DAn ziE(HAz}#_x5G2(4y8@oq{UmIuRY?4pH_WzW+VF^DF#7>G8+*1NShin4o;Ktj- zI5mvALl&(t`JhV`WO1D+6ond-=L{wRZsa*cCUizxKh>TlSP(TDaJG7lfZ^$w@Tb$2 zahKzEu#hs>u+}yr4dhzF-<8s@`Gu9{L6dmlE^4|)I`0O0Z~L|oQ=Z$ywjgot#&K63 zN1pz{STJ*}og*`%rL>^mUq@@xL6#O3?ku*KPMT;8ibky7u6DB1S`QqOBk0WX9t!?F znmQ`pKTNR|CP|p|%aY&k{hv91H+oV1^@yDHbn0%?Fv9gS`ds`yzzryA+2r?&z$}m# zNECO{J@zH}HI9Q!TIhUX;NNn;Un|=VeIC2uYN;k#xDSyk_rG?m$)sD^x6Hmf))i8B zb`JB0%V@snxBOtjz`-|PFZ*(C<#_JsY3LS*X3mI-xgO`Bey3>=sGjvnM>JY{8ERju?BRfBf+KTv@G z^te7kHiWWZ064JveK2SRP1F@|%W#s4F{y32=T(2JwzaaS+CuB3>R7=pqOpS!B>p)%#*!oV zitH@CdFyQ5)xnMDQRA+-8UAPlsTU|p!6)bri1gALuYAG4xRr+=bAqJ0ykLh5dIVXl z9Hd3^6~z!$m>)wp{Pla(5c$VTdC5xr^A?_4cCI*Yw47Zc5KDILsjSCU$Biq6+M;TX zzA^^Ox6u&EcNaS=jlal4sO*SXfUol|n+tnYHodHIv#Mxi(%*}qE$kk+m(K|3dW~w# z#=jiq=b+0Dc$xMAbja$7wm^ElBajT!of(Jh>C$qllXU^2WGL&sK3BSIlqa9g&$L?g zKJiy%J#JR{Ux<-?H;A82V84`^e4&Er%e5Eb1Oa>_!$pCo;N!0ahMXb zDS?S4hmKZ?bu2QxAh>B{_v}Gs(k?ak%G$B-^A~=U+s9Xz8+NR2yyul;-GF|fE`U>`= zIe~+`jFKGF93oZcLC0&&5r&inq47FH^LFyZB^!?b;yDj3(ak`ny202Zdyk?$zu5kh z*A2_`28j)1K`iK9O^bcpLh-z5?$VG1n@FvMo8-3VSNQ%`w>bfC05;6Bj8ss6#;{EF z#cTPtnVwsGEb#z3W3!m_X#^QIKk|peL{8?i3Mfx>i5ReN2Z=r#miNge$@-pVQE*LP z{6e_3`LU%qW>q7$J84@koIzH&HFKtt18|AInt@t=hzwiJ^2~sK56=C79)m8270suY z&ir60;pZo+Cd>j@&0=x`n9wV~{0a;jPx##)ws2}N{2_~;x-cf>=hm40{)z^mAzn>w zkRbXsb6-bJwB>L{^zrQBgcw8>{Lwu}$EH0F%m(3H6jT5mr^Vz3GO7X=pUL=2T49M{ zuc5&b1-}?)Gg?)^Wn!{TYeOBrkz1Wd^4uw+DDcta#htY5oH~&;Y4cb9c%QQN^afGH zd$fqzK_A9b2f;ZE{0PXiYMuX7i~m>fuicDe|9UM!XT6%!hu28P)(+>vviG3+3uV9AzK}>T(Hz$T}W}8p(zd=HE36&ANwF6{Eh26 zrU?9Q)d2Qm1@eTc#4;4{Od})C0`O9~0#})wIeAtWOC6ASb&n2C7IFptMXlMA1bnxn zp11?OlgJLDZ~S?ezu$vdMKBH_{O)EOC#O0s8BpJs1fgZ>-bO9iB~LvwM?@e?GXT7Y%Yx2A$<94dC_IwNr~G95Sk-;-8BgR6rdz^rA81%bw5E zX+`G>31SCnB-7*0W=9(HlVQ{kWY9O7Q&aZQiN@*fjmsy2qv@0(cnX^Wbe=(?59pa_ zQu$b{Ryj=BTIDF)bXo|L&YA0v%`*r!MkHb7W-+ueT!8DRBk{vcwRkC<_yZayj*4V4 zb>dyMCkslYB^n3+oU=~RGIICJ078Nm7QGadpcUTs2}FLmj8V`2zU*w5QLIKD#@k;N zf<@I?H7aLJLpxZNQGg-jr+30*6hMM`bm6%%PX4)!mU6T#?b{u_#SJDcc%R3#CAGzkDrBSi$OalNYS zPdUA^?W*U!3#AT2i_X^{THabX`@LT=dO<+!7*g3t-Ovw!^kq;AU=x0}PII4_N|hW* zmW(kk6Df|HG;4y>p53^)(oZHi0?Tm>ks&g&_j zx?N{s4m6*I^H7(b*y~HH0a*%X!q5-EL^FJWTx3T;6Y(?X%Qe5?L{nVtQ)cng0&zDF zpbK}Ym$nwI)163~6!9J9;=HJ>m-`;&D?RoP3#8=z1B73z4ktCQZ?6q91zz|3*pp6Y z54-KX^!e4x_%^Lou}|SO0#3h&);5Tg{u@TSKnU{+7jnxBl_ zf4`rx2;wtP`EV;BSBAhYRKgeH6iPr(fa;8p5q2B^$?aXz9j4Qx2nkw$)u;Q$jqzD0^vL z++H~{_{&JWI-{hCZI)!S^(wM=cs8S5Va!p?Ga2-)9;693 zgw2(Ok%^h8+&_@%-OwbrOI+gM^FB3NBxaC5~v2o%eU5^0G3u? z3I5V`6U&NUlV}KI%_@OhqYm}UpT*G z)}7kCq1$RGDD<$y;tB8Mw8pyS1`RT|Wz-g-^w4_9H5O&)Pz4sE?`KVF5hQa>D)^i_1|q_gP@;L>0&+TaN!nfJbL`wVbzpM$m)B0nJ)(*0(nElg3|Y4= zXo5nsyjYnq#JMp+h?)5$#7ng zylUR-3q!l}V7I<>US6W}zJNLbo(C8NGSke~+hGaVSNwM42k6iBdUSDLqi}sFpI#tN zxQ50E1bt)Me%Y6--s43&b`RdWyxp`Ed`T;V?C_Zd9gG?-*mB(ct~MqQ9+K2~8G!>_ zfc|X`xxqJnVj_IxVbOlbPrBTD>dGf?c!X5dlr)IJ{a-byml-gM0}Oc}(yEAX!yfhW zCG1tuQel;VpRu7j8X?&1ugpACSTG*o?p zutCkl=}@nJ>lT8L6JqvV^CmX_l5%Ru5vJ!v=)?EOtcVYam>Qn2Pe-e&}Y-9-NV z2fKNOhTix&W2(t`y!830j z17^lObZ<3{PvCzxxz=&ocDtN;)4I_bTG{V@%Xd2Uz9Ct<*%pM+~9_z8pY# z1q>&VBw6F7aDr{0W(lv{hh-j#>pyanydwGDL)^Z^lc0XO|1uXM+QJ9X873drAqLR+ zr~i;5Tpn!`5yRy4qTbG3!C{ggfcNmjgC@M+*4?3?_dw^0{(euLyXAQ-S8(5#2l{hD--`n1Q={G3Dh8st;=;4R0wO zDs3A5-P5l<{SZv7dl@5FQ$9od{SEQoIhEwU(R@g7eyRWn0B{2Z0HFP!b1GX?3$y>s z<%iY!ZI}MJM7QeE-WId|B@x?VASHR!<%To-$vt+XVuZ7 zap+2tR^rX^}ep^HFZ%HaJH|K}f=>Sd{R3Lfvc zUs|(yH3x;U<65XjslL#e3d9}Y(DZSkhy{1_(Dm8i1QQU3xb*)vnASdro|}}W@yeo& zG0&c>(B{v|$@cYi`@4@awa+6kGLO7+SAlFf%v4r#LKkEv&#Yg|-k}Qb4CjEK4gL;X z-B*oNr&TbmnR)F6i~hr)?HEBkN2% z+D7%_+11NqGQ8~-#a|_>cAW0xg@f>w(-jJ7w6f0Em0RvK=HVU)Bsr*=26Ov5a$zdlB<$FfrBVs92w#r_re}c{I|Y` z``BItLWszB6V)F)D<5vh~`NxMXzN z4j=irMNrg6D^AcDovENRt&j-E;;&AA`lz_X5dMH4C%Zz_Ofg$8Mv-D!LvajeKq_6x zVA?+M#2)W+sc{@c4HXxYjTM&{JtY39Sk(%hy>B|^`-T4k(Bfi-F=EUq?`z;qied)} z&GBil<$WIND$+aYN~~sU!`deBAehVi(Zsf0m;x*tr}*BVI7e+jr&)-C^Lr%KL=&Xd zA6UCvoh)bR(JW`D_t3O7V>?%ph8uVO zhgDe$VtbfJBW9PMe8(T1ayOG6tniblkWqT{*6lC1mk#b0BWP)&&pbu+e(Sk;-qkeo zXO#a!&i)_djC<{8CjL3IZIA!}#{Y(#iLu$godrj$|A4MrRo3o5pgUEM9w4P$4|j}K z35K>7q@tl}SFN0o&0g9Vip7O+E%|mg&5oNM6hd`Bm}#OC#H@)?5``f!}lF|0`l)njDI@#nJ%&N0nHa0Rgv) zx@_t@pPs^kpHk#zw1vTs|kI9n6`633y zViv*={npalX9dd{aR|YD#Qw{VVRpcmN)iwz9QSoHxqSM{@;LWe2ct)SX z=-#a>^TnYI@#BaxnpOJ~@nx0U9sfy3t&_?4wwkx{llw7WHn-4a3!RCHO%-=yd_mdp z9bP6#1+trbG!IN7r!!U&Ik{vNM^I#Li%okj!o9Hl<6Xh6$Y?!!%d}LuL5vq(wFg>< zny!spWkb$f^P%og08VIa(I=%-7#T?Zr=_RK?g6ZCuGRRdhRi5p=B#=ztuInYW`4kr zKZVyXz8u{dO>ot=n5n_1IUb6ZXJ$=0-mTJ=lU>)P7*(`_X{W^6gxNu9C7yB_jge#Tud=4LITs9`AEs{OJd z$3#!YWLL{^EKX-S-3s+ZZcd=|nedK(;B@w)^*tN!ySfAO;qBhtBY!*sfjfV`<#tmU z!aV(IQJn*4Iu8Fri}jdoq6U6Odo?B$t*NoUrz_B$BY!pT##yd2>7{fggd4ZpvmW{? zb`b)befNuw{B-2S(YrGgp0gL|zv(X#t)ZqxK}U4+FYVuf0D%8&@BEKF9TP`KJIDXz zzRT>i+#mxi#GO~(zy=h_5QzPzei+_sJX>4Vk}NH$+;N+cm)Ay!8gFto&G1j24F-eR zS|wTcrXH@#h~!Nk73Pj9Om1*893x5nw8Ssn`u0Q@tM z{%3s594(ChMW;kf+U}4IvFB7>#v@`$HFzxz_@=|WQ*@KJDeO<{&>R!84KuYeup~Qt z%f~J^^HNYl3hf+p9jW7(hxfyDya{bikX}`dn!0}+;(@wq>x9sFqK(l$Va%3ABM8)F zR-XGhJi9<+2*J%xw;#g7J1)C!eVLLr1++~QedJKNXI8)3>cm)(R=@*Wkd)_mUR~%e zPSJvXCVsaGrTJ*0qQGq9vzNJ+NusU+_(Za7NKbW$bIHmtun0N%mwNSL7r4zWDoxUJ zLUM?Q2*0KZ9C>xkw=H@?o1nTCv39hc>|XKvKS`%G)y?ulK}bdIK|BQ)Xy%6wSh2{s zWW_`#W#=#;4HBjL1 z|NCvG$vrG3Upz0>sGKwGJorF==uMCRA$p8G{= zrNhf6uG}7Lc?~^rGPiP(JTUDhP#Ag#YYt{}QDbX5kIVIU}DXSJ@zpB*=J__76N|@wt)o~7<9N>)N z|JBpHMpWg8rEmJpIF|r&FpD`k;_lr^S;`hb|*C(a}>D=LUp}3J2g6 zDq}2}7?w$PR+=J!M>?g44^KbMTBF>4CZs7mYMIoO7(u7($0M+NbscD)qHUzUodYE7 z$I%nb!`v)gBZHNC&pm5HE>p>Qtv79f{c2f7t*mq@N0vMJWy}nMPdjK{wei=Gli5IH zhS(h>%0XJRc-Tw$Uxyb}KJ9bOwjE##Iap7fO2JV}(Xm9D^Z}>az3`f7s%q6Ktp#e< z>O-y3Um6iwdvyw1Q(H?gRqAM$G;D+2+-tw!C+4uR4Hg9qQ%}K=y`!NrP~F74*n3jw zd#=ayTN);en6Qe&{NMXxsRA<=#l2fX9b z4vQn@cFK_Rk_Ns`LFE53x_B`9VFwRPIRL&Rkgj!ryX{xmjF={dihhu`lvwe$Ef~ww zzA%I|!DWJorHKkrE~^-x{~BD+BpRIGN!Ay1{==10%0u$T79Xd#c7AxbU{~)*A<}b^->mx?po(NPx2)1YnSR|ntvl!Lbp#B{a0{?&lAzf~D3v^GoItX- z$ab9$s^_>?!%O^<{8lWEERXM@M3HY^=Aa;-K=bXt1b#Xy72K-r&!P*mThX6jF6Aly z9d~f!y3hzHPxTOkRg1w$upQr{If45<*=&-3DeVA1k5wBe@k|Xo0|yVpN6ow+JGLnO zl|SOJ9PMTwZIoAN^{7oaz>pv<;Z4v1LYdP*LAu0hPg%VnCzad%@z13c`D8q{WeTc`*~Mn|^Zt@#>EhY_4|o`FeIy#B>o;#;6**;_?NHy0A_m$D{bxxbJ<@s(~c^ z0Q>JBd;R<4EfBU4mVaeP2>Sn3rfp1|9W9LheQu80w(X?|V$ZBHET8|%+r2|#3$myM zDPbuWmnFT_J{er9k$j@+wT@NyAFz9^E`a>V)Q03085&x9-NE|XS5JoKWY^qCVE@j> z8LpCyF}@k0)xG?aRjnJhU)#^8k@L&sHNt~edV+8KSywz3^x+p7{^GZh{Z~4?cRhtl zil0YEx2Eogo)=#qgoH00!zA6Ym_<2S~dst<`${@5dCdoU;_Sur7)mu zMw}2CmN0@Ca=P9*EWCOVt?pE}I17-%Wo?e1N&mf+kTpgn^;z$$!bq*9{XK4g=slRy2GT@qG)bbPzsrDQqgOxf|giLVjVXS$<%4?-HJ@fS1|b9YH&C zw*ts%j>$)6l}LS=`{4UDQozN{Rk2{E~tliy(*}+Bf6IYN7 zfX}L@Y{MbacWT}TE#83a4FdBpCqk0G$oP=b%sAY_w9$e>@aWSrNjSzw6bc@xBh7rx zhjUkneLzejUD)n}cgIp>4`X4uOn-KRX6fM&&3K^4hw5(6jT2993pgEQ@U64}0 zGdv$!3W*mRGcq@97G&(e9B>oX`W=>7CZlWFG%m4NdWJ#AWj1>3WOw7DY!e>K+eGw4pECNVH>|K+Im&y6|`Ia0&t5O?XQ-+%JMmOeI8|E>N8=R+js%#W2Iu zJ-wh$zs7I0LF=JJg0HjOwGZK-P#^_*evifa&06Xcpj{PBQ!Qf-V|||GUps}YW`3^6 zt2}mg+lvb=JAG)KGYZmWofWw=E)#ke>^IfGp;y8<7dWmEkv8l;o|Xz3k1-=~p-!RDPGEb~yeRJ>9ds`T6k@ znkh3-_fF7nTlOti=l4IvK;gfo{j+g(gba89;FuNwK>6R5#Kqad`afEr8Qbb#xBJ)2 z7fgQGphQIN+Bym((8d3<#j90d@w&O6Hy*pfdY+Blvs&VG{`dFCG_0QIn&gIVjLzt< zFy=uI2h%ba?KEpu3@|-PMfJpphH~xUimIdb4OTFIE#h#6E>#yD4u4tg+stF1DYZ=* z73^^J&V`xY+9me8GV%!-n`;r`$F&OfwrP?$O_<+jnl8KHmPVz!rlJY70T>Tk*foiX zm1VK}Bbmy^ zq09*o^YiKibUiaFZ2oLTZGHX?xOqiIZlWz%fJ4LrHHwZ@$pk0=CKpIPPF>ll1 z`T2^mVq^XRBl97=96ZKX(4URS<oc}-EUtg)Y3=i zw|%cy-lE-I-v@Ydx%2%>gtRmQy1jc=#OXI|I58C-tHHxR=qZV23`)SgZb(_#jihT4 z`-c!UuCy8{mTrWptRTF|!k$=@TA0=5A_IT03|Xt1n-bBwph?w;MsX>Jp7+(~Fvg!Jwh9nq zRLT@c+Fok^u?6bqy^o<`CR#ThXfbRATT3)cA(7!gaHih5s7B`QlJy6kMp2ggl%2Fw zn!De!CPy-9IiIq25R2-ceE}8f6E4WkrG4yyREB_}TP7i9ujS;*XtbsjmPX%e!7m;> z(U&>Av5cF;(g83NLclUFlT8`6L~Ein%Fhd&&8SqxSU^elP;zEY>Gc|7rQf~$+(G8> z@T%>RNNeSyF&KWco!pYYR~{qG6NZRBxEr&N#gvPs+`gx9x2>3F^5A}o==XK|x zSU#KDrgrE_gTG_Ntn1}P*QvNpFGlW`Cm&ctGPSk1N+> zR#(EM=~F2|hu2bETB+5p-sPS6kqz*pXeD}C@d%ft$ER?YYy%gFE?=ScbEVL!XIl)8Ks<+9OeRnxqVLD9_@p8nU{E;o+=Mru&CO(YKwe2{Y&ypYr#ubW6%=;2b^Yxeo4@{W zT#Q$q^Ms(gX+XT*4^Rt0g+EBAEz}!*Q}_Xvr}KI?8iBr$NVu=dXh#K;d1`tfM6;WD zypO|{`lELFgVZ%v0_KbbBPKHj!<8`sr?=nl7I|8{!q9)9p}y~42y8wy^RzF;&{j-b z=~Y~w_R*LEFfdBT4I8tyma`xFGd!XzrUQ(O@u1DbSzxHyj~hhLARYWARCPQ~2$ z0&!oWbE3@3(-aN5QWz576MO~H4~_S=uSgtcbD&(`qGp>2Nji0`igq-%Cl;@amP{3d zy|E2V)-F~DdfJYrKtKp#i^J0@Gq$ZnRp1(VdQ&Dykcb$ps#e{$&X}Y9V{){Q$C-6! z&zhWwmXHuV!{Eddi@1G2h?VsfOJVMOB|?o5Ad4>aYS4vr<>ZR}M95Ivh->c9@{sfFNo ziKgTN>SP8Bn5I(1TFZ#g>H*#Ix{HP;$`C9#O~2;B2WurmyO>viwcVh06%r%9#vme? zmPWixP%yfW|NS#M`+`zAF{-2AgkwBJ@f4nRIWm!Q5G$?~{2HVITUDX2F2rCkC+K;u zSP%5a%W$jReVAA$Lph_!J zgOJ{J_HiSmSsiVoK{m?jAJWH|&WXQJ1+o=$5IDwv&&geeYDs|5_Y@b#QkjGgKW&8C zzgFxM`WQvz9%4O=5c11ghh(E^5aBGT1Hpm*2|kl8YYELfS39z_I#ECLU|s}#af&by zAG+Mxi#ufCSw+S%!YX*!Kma=ybL**#e>2!4V?h%PWuh;$LG{~O< z@i|%3Uu#w_rtKg23ps$inUw(lh1=@d`TAUepHfeNX;IBRX-@R%=F^kfAS#-2^B0Hj z1V!<%5vRhLAEd%))d|8hQQ zpXX}7X{+ipIlcQa^3L@QLGo;V^2yZDK z^w5moh?HhDn%F5}$?P80p~gJImcl z+mWn=LK@|tRI{n3ZP{^ytoM-)n?vt{(t9ReDr?!V1l{vs-FA1@S-|KJ4v5!> zAL>^FWhh0#fvAN{4GiPqx)%*uJ)C|0OqbML+6Jq=y>{Wf`J292z-1!?;}su>cD2Y} z{h&x3{hQT3Eu3=w+Hw9hHM(7%TmHs^lz+RNqk}{6%m5$KqA-qLPc`c z;Lu_Hi3FAQdXQoJk3!5wKSIV^OFE&NA;7L-9!!5>YIS$^I=}u;WjUvk-QnBj|F;sA7ok!)y z!sqK>k37`b4H!Az_kIF?V7zLOtS=u^mBb5;?p`_$a?;-O(MV|4H)-epL-cQ1H;HcH z2lU$y`6`Mj4E`oo&#p`PMfpLu53^}gtlo~n4^1v<{XC7(;~j=-4us%(Y!tGXqxq}P z!AJxKlY~`(M^?8tbl&1G#?TXJpoO0~V17LNSzv80L=Exri^Xd5UG1ZcXKl#uez>&V zfDJ6F!et;=H8a{);Q)t#L*6ZuHJ*`d&P`?Unw^hGZPh}MlvWo;9z_AP`4vuK_Py3y z#!k*CI~IbtEfRP6AO_9>1+^zyx5t=Cqv6bR8*YuGg=o-hOIiZrB9qVE$7Sul$F@=1 zzDwP8otk*xdU-|Z`D?lpQ*{PUOP+fX=oSmpe%7Ci8E@&)w_nm3<9n8n1jDg6oNM!9 z-H?b)I|W(jEqg3KdA{&sVywBj*&PyTZOvxoB(Wi5^GX-TKwhAU3KdG81qMYITJ%{m zg)sIA*Gj}c#`9K4zZ7VjZJzJ*y{MAYbwYYofUe)vx72&O5=E^`s{_SrlrfQ-;Ym9j zAm&(K@_i2~7-om)S0#3y0&|gm=c>9?Y1PHS;SK-BaTppcaExoUuZSHLh7hR4Zx1-uf|~T|%~*5o>}PPvtV-Z@ zb&)gn`8~q^@ot776@4fT9_t~6M^QPfK4R$F3<&xC@Zpj6+vu+qO!q&H^H42y1b ztgiEBl+9o5wjz~p!UiBa#n}_WzV4+ZvD^7}x1#qyVs=DVtV~-VS^Q?FJ+;Y&=l+{E z?h^Dn{T&n+Pll``9;Mq0DF3b!c<{PJy~yt1c&)wWZ_f?qn|V9L&bY`Jk_~&Fj7`t7 zgs;;5XT7~n>w3YD>Jza|iCasod-kd8(f6`Q;+r5u{=GLxu8f`Pvs0v{-|jat~s20u#*Jqm=WUUBYonyInI|=vMrrpUgqbL zo197S?cg+gYy@L;3PEwaaTPkfJUvp8*FX914&q40X*3;a(2|Sq5>2^6NI{D6RW%svBSRm6gBq|94(S65Ot)r&ouF z1P%Zo{qt=84<+kn;b`(7CA+O|WB2d8@%u)vp9+(#q#^6b2=Fxc-U6fz(Im>)2MH=x zXv4-t8UJXF@pj+It#m8Z;gjRvl=l1Gt-_S7ab{@Phca);CclVtisZ(=4{pYHd-&cNJtb&QYxiM-O zjGAw?u)_9O&4O6NgHAqbcypJp+w0-Dm7m|&6iZvL)Edffb@%Sa&Mj)V5EbXo(D<>^ zaS01!sEagEN!5x{ySCbyk4}WL6#nLFFs&Z5n}6Qr3gKs)QQTFL+JS5TUPR$pcMX+K z)6_L6w^aBvmuD ztuB4=T?{Iz!OkC5)@XyFV8VEq56X=pQixCwl`|@ZBTx|x9gz&KPx@wX+*{)jO-bVl zGq7<38e>u5;3Z5R2+M5V2oxvI@SQ!PL(!WK(;v2=PB=y|<-H92&{6pA7r29jJkz89 ztOGgGg(4;gxfb8ZA!*j=?TN_=79)O0$mqAOF-?c}%DUr7Mp;$*3}Z0&Jdofk@Y|QR zzzvKp5*m#_f3j;lcM0LTb!p6JP0FFF3;uqmH?%Ufw8N3v2TLL3*$>(*e7%PVP8Yd* ztPwESeno$BrIXwDNFTi0n6A}DOLHbu8i})GsFrM^Sq(uR zJ(p&z7hA(_Xae1tA0N6)gz1-OVdfb6_?$J}pz ze8kdOp&}s6|5{Hpf&{CE6Oq|y3QXZJs4qH&-a*SxDa8OH>*aD|WO(0AC; z3g_Y@>YQ7MvXWE{M5QOg?yOAbtt%+%diodGlNDs!py1dXQ*x~n>!-B@b3o1T$CD18OA>i=X(iuzFT3&5_u2K5^O+P7cNOfsBksy6W*G%yt~qOGXN|hUf?^N7w91`EunokB%(+x0i)CYsZwjt+|OdQ2{F7&tjME8UN*f! zvb<1|5mcYc7>a$$Q$R>QTJn9SRHf6k`iXnG>ER0D5o+?eZ@`JW7D~rR&qB{gZ))Y@N@rzn?!X``B_bxTA~x)+ zj`u_Z7?{4NG(A%l4tNro&{`|d#`v?2?`zEuc zjOO!j>E{md)Bj^)ouKFU$HL^wtb3DV_^_nWBJK1`=CiRI$vxacK4d?TSzM% zS2%n>+1J-SH#iWqwXJ;?o%b|M+PFkBRA4JTnKpPEb>Z357Oxy9?4_ z9~c9?g#2>ePo%kw4B1rq+4%!hU$G9rGA)}aqIOL#I)}Pi&8wS0A5cpRW_0nu(qI>9 z-eHWFopRHRe%0Qc6V&?9{)5!fbbS6Y5@j|eAq+Sg>lVU8GiJL$2#iR383ziS28Sy( zR)U)$T*L3EsP^vgIgu}21;=rD?viZo0U!2BZf%l{#Glm&npVRP}a z%`V7}Y|bcQLj7i)F&lX|fQ9z8x*~6|<4+7*hB;L4L>`;|^;QK6wMF~tgPp3pW1Gzu ziWGhU91{ILt;aIHM~KK+<^%EG)P}PLA^mWb?jo`S z(#HlKlX5-nMB$(rWoF!ta@0Sn7KW94LE?`t&0tc0F5S4kfm_G3WTZY~AMueXNbSk* z1UnD1>Q4ZeUGIiyEX9%?t~%3`iUy;2dgt}Vxlt?M{UN>0xdWP^(NLS35UhHLFuziZ zoA|ypA{33r%wecFsl3B&#(Bw)RZ@JeA&nwgH4BL|v|uw1F-D0k8R~*gwH?+_w~=w7 zKU%IVrowF`_kZHl4oSDw%uY7Sdi>U<=4!+P_5Lk?o)anYYS^gsQ`dkKMo~1~~g|(W4 z$53_%FqxP(DGecTbgw}nX?LWk0&c<-@uY1hh4RiqCXEOU%C4#sD{VjE*?O6Sk}tYUbKxurv?tlWAZ?LzrOEF5S6wWsM?jC7n&lK?$6ktWnujnGyH3Z-vDdO1M(nI zG3c>4F=&-R?hQXSQI;&0S`XjG!G58ASuit&NwjFApal-v>rcF1~T$y}g8PE%emu3A=f`q}=AjCsez&r-cNd z1UXFuW(9ld@1lb~5OPb;K%k(&_qx~j{`JiOTiIOc6gJcm-c+c4S59CiY;x*#=t(nQ4 z-U8oZ8eO>4#i_r{8i@-F4GCCjD8S*q3=&Wty?jV_H zizt8y7>Qf9M1Asdtq1rEp=Snfk>mVP5H@K+`3|b=F!uiL2pgZ5kNyy~#e+JI?5s>n z8;@1nXQQTTqN5(Yz-9*n(X~-N?xza!M|Mwj6kFp-)EWMS6c}`Ml{$!}O4Vn-P)p3E z>Zi6V4xht-VM|y)AZi>AN9YQ$)6#@d{{yej0b^dP4yNqBE{TVBqs2fDhFAn-P{s9z zb{oiQM-v8YN3&1FPl^nrwb%}Iiud=p%!XM6cT-__9W8osm=J-OI80-MdsLnl%tXZB z&JvzHngipAtnTs;^y=c}m()R={F0jda6&pb6ih;Nk$?lFbMB$eKq^&ZRQS9Q)i&+# zWc_~yOlURq9-A3q$b<*G<&#~m8owSOq3g*dRDM$ebME&id2I^7BOjqxA2U)xdNP$Z zH=O=RaK-<=A|Onwo_USXm*u0@$k2>5DpH@~Nqq_;HUCsIFeln*0mqhZ`1!a(?vI!5 zV~N;7E=cia8fmbTn-xP$i&7Q+y67P<{T+Pctrp%ng6c`*nHkpXD9p$#1LYXzxB zkptWH#bq5io!lRDS(TkY2Q>k7WWXvj&yWq>0MIFrpFz)&OGxAZ*j;=8fO2`!2ox`&u?aZ|CAl=aVS6U~ckrIFGTBLAQQh(ylL_=JLq?;+(Z3D= zanFQQLpxCcvoKl_hq3g?|Y(jv8$CjZ~}MWOUxKr;vX6_^&&t-uLJS zmi{H`1!HXvQpYJ*?^WeW^mxuZ2Re!FuOKcGbiyJEf7z8)tC9mf6E}3FD2gC? z_>}}tV_TuPb~x#qUTWlEZ@5Z$;YWCV`tr z{;&&@Hk}A!5GZ!l4|YRtVy)kpX@*sCr+NeOh=8NVJbBj6 z*1pEHy1pWShegkSuVOfd@bm2uK;~Qd`)2PAH3MCvO0~1m9VVgmh`5upNZkWRTWcPP zqe+!iWGPh191x2Rj0kf{#K&gakjPpk@+e_lSs}zq7=$vjZ=f*Z25ejn zz}sm(P)_uupSG<4G-?YqSNfEM%lS_wxv`wgwEH~~EJx+R z(wRBEaNPs9tYPYBRYjn}Vz@(TI|ini>?DyI9YmtZz@1&K#N(*TsSwT)8HH&3F`8Vn zs&o}ndfznw!Gv2_F+?EAR4mMSa>7MYecm**hj>1b2~vIv59|Aw^l^|B6ZcfmM?<<) zugz5Mg+XU>CCifm9PsWTyq^`8>fh*oK(t>%|DY_v(0O(kgR&)yXbsPfBAm6oXHST? z0XX-;Uh%CF{dL@b9{C{u=&T`xI3FeGh`Iys#bLyg@Za8RJ>VZC??Mmy0eP7hSL+)v zk41o*EYp~cUV1tHQT!)LEOTbn;P#mRV#M^0#G*H1t+H(P4P_?WV>V(n6;VV=DQfGm z>MOO;W!g~yDnRXV_UITk2Ic)YQkl>2cQZ@W(G}`uF_Wvk8P}yzz{g=11-nJY>w8+@ z=N`p#qKVXVU)hOpB`JbJ4gTDP)F}XB`uUBess2C+Gy30vqPjHw8y6_Cqvo{M!oPY6 zp`l({$?)h_ti7p^?<+>r0rZhQwYPvEPvkPw7WT>@XmPOz<6<9C$pkSjbxuJOyKQ++X#bwC~D7b^u%^zREC2-SZ*k#{u(WxXDe zskIeugoFjL-9hSo=pGZ3Pwmt4g%cZ}Ub(`%4t^Cou%<%$7v2nYK2skC4*C!a_)^kW zc=OhsEkqv$G_>B6a3zEh%3mS!I;r(~iTQ_5t|_jJKIVx4v%=ag8q}o!lzvGWx2w1w zg8)^geC02cMNs5k?Tf=GrTU_-{35GQfnCLzUjm$-`^-qC=y(2=Mo676z?4@yxnLq( zad;9Hdv#toJ{oo{SJ7B(CuPxg@4>$r!(#LOTM^Y`DhFvslCAkJn76X+z|8NZq`@l` zmuF#7a*pL26qh*8QkPIYJ=-ul65rJg-zKCBev&#U!~lhNpA?X0`g7MKkbDG(EK_`H zNE3x4@1xXOZR1NOgzjQm1l~4K{3r%Z3{pZR5Uc7Nk1mYUo}W0xg0j6NgBZrGMsSgC zg+}IGq|)6mS~V`Sl+(A8N?g(%vd2|C2CfD=3LXURj@m2m)UT}T<-kUjJ@t~=7>A5a zG!vzp1rk!$jN+t3M}H_Cvx2-wJnLJZhUlV|l~?pcY}+-yfuT$nLY1mv%qQ~@tihGx z`3H8((#I;lYlP=KP}o#^60ml&lp}vj%$=3CrxJn*#=~#>SLQu-XrIgw(>AmKp6rPv z{WX1&R`*h6_Aaqe~oOZqT?39}O zGn+>_!m5#xj7&}o&6TW;$n=V32i}XcIHOQ5-%V~JwtNoRk&V*fib=@@U_`)H3`vN@ zt|J?VJNo@DCYA+w=@`ov=B!eN7-x8}60>jE+AcuxsnJub1NbAQyWu`#g3fI*<2OY% z!tB`O&+K04Hv6yX0sy|ZT5OKjKSsUWPIyiBoUL&f&7HNmv_u! zLhO?yL|w@LV@G9gM0MDdjp@>*qGh3Jr4&hUL#LpNJ>mxyDHd&<)V8gyiqjWl$uW*5 z$iPfK{N|0szg%e~iaLw?i%3=Y(qrU7(ILlWIrmQfeC^uoW#CoG~ z<#-4{VU?0%pvc7nJTrbJiYRU1&)qzcQb8X|9p}~k$9XtMNRR!<5{nQcYVH7EGi5dk zoU&w0j-YnWkt$7ElaxiLx7rK+2SM3G?wD5U z9?Cn*%{ukxxJ+Nx_{IFDJk%;aoH9*a0zDKadIpk$;9;ad-Nc#>gtrUP7NBxRfG)gm^+#=|w~*?wNoPeu0rvE!0UAU}55N4#~te zVy2tK`%q9}VtQZ!*54VkoC#r)m`TA7_rrz4~8Hywt@_awTCP^fcc!}XQ; z+4Nv}7Vf5S@71*#gQc@nYd^xJ(#&-h+Ekj5?W{j|-nZKo^qZAHKc<`{|1>(&yV%(g zQps!1lA`N5VR^+;OD4k)Naep89;2r`;1Mvxu80(v`3Dcm%jv&P+Ha@nGAxf&f$GWW z@k8gXuB%L&{k8pL8rQQ)UY-B24X?!KRIRRT4Bl#CO#vzje^DXVx?5kZDT9WWpg~DO zOstopwMkA#u&AUta2oSDx5>D%H9?dv#B5(10nSk*0qpzMnKD+sL zV9yAcj24OVLYzu0Id*rkWf9CLv`Hm49}__=+8Nx7^fZKsf6`&#z;%`bnw4OdRqaRwBro&$Vf9fk)aM8IrU9^{WoLmcmBe zv~|9_;!mV1zo7_REX^a*JTbFq54dP`WP6+&@i=pJ%;GZ%z4C;_|6><+5twRBumi!* zJfifH39KoRmOcUE3(Wj0po1Dk%qf_0&mWli*?w3z_Bf&jDMblItx+RF6sllx5^p9S zRiLR;-xgPHlECjr5_DW%CSyNzIQaZ8`N|2=qFdPQP&>t`s$x=IZoB1NSiA5Zgdswe z^Uv%K_DO(l<}2?6??T29LwI_`TEh^e-xQ=#EF^-Z-%zY|m;we|meYRrM@?7fE3TB} zr@l~AfdHtXFscABf6HcTCml7<>X}0$U=<&#RSIDdc zQutzX(abI5PNt0M1=%F@%F@6pAv*Ch@U)Pmp$`PFT*c*)OnM%e&V;enT4eu`2expxXj@Wy=jc)Sr~|J zND6ri^@!j5D@4wUrykC@aR`L^bd)_2`7*_9>l@8O;wvV27v;eY9(jTfB}Cj?KJ8az zkHwB^gw?Se%ATib#H0J~wZpDpxRiS_$1)Ql$v7ZP`-D!gCCAta$^o#rg?m@vee~X! z_rF2Lnk7U2QR8v1+VMj>#SFcIez05&_DNJ-$jHXZJ=yD!)+1sF)xM7&=p_z**n@ZI z>?I1qTcPeM?mC&J`8~$43IM;!I3rA8QrQ2vF{KBW4%}{A-t|jXQl*qOPl7=pMzxj{e@U-A3%z0vWFJ>V z$E~rPqUbtQQ{r_HV;r?*wxg*%Pvz0F8^}`R7HJz#;r#TG(cyMgnfUv~5#Lp+e?Q2}#!gv$1+L+mx|MmaHeVCx?7HYo7Z zS&IL0s_-*4*%5Dnv&f+no0x{L6KHP7<+A(a4qBgtQ|mk(6Ae(LM^n#NI*LVRZ6KVsX}tD)*oaazv;%2 zqFlUx5|b4^t&-ON3{LUxa6+(svDX+mcpG<7(5-QS`(qawIu1|q0eyh)2F%)+(xO%c zD~4detSy+AP^Cp9!Ms7RmN^Qx4PpTXkUqFOW2NQCXlv37r-T|z3@IUT{M{AfQ|=V_ zPRhzT%9>2|PzLLd*{M7q*fp@22V(r`Y)~lnsuM7QBw43z&Yaj{1*L=czvE!t6{DmN zkgc{MUyDLx6F6b5U0pWjrWpmXT1;gjrMYQAj|#LI_0GfG^%gjY<^9&CL&jD1BxRkD zHDWH0!}Qd1@cZCPEZrv+`h6Xr%oiz%aH zJeC9|#zfqE<1!<1v|Q$0_NxFhe`=)5D(+Z7oU;-vlNT# z`X76)HQARJF=S+-a0L#rY|bohh;38p>QwZ%cKp%&1p>61&4OxH-1TlMzgor)GnU3A ztbi5n_o;h&y+X^w3uP+~S@H?xy@k!hcP`{9E#4A9N^Zf;ndl#^pxnmJ_4oa;QTBKQ zwjO0gEO;W-`0{|aH-AfYWp06jYUFh>%GV43o0A2CgB`EROOA0w4b;zH_THxHAh>TG zd{iqSaZf)P@$C{g4jzs@rzIH5unUEAC*+hVV&8M;MaDa2 z<0MLdm1A=*mZt9}47^x;J^jP6u5gvMVk9hioEr|R?W-09t?jPZ4QB(v`8f(M@$0_T z0j3}lqa;V*mmJ%o)EQEnBb!9R+-WNbr%Rb3(;fwx3`Xwp4o{tE{CZfWov<}koXjID z!$r$=WXYd3l^Htb6ZO~dAqT=g5r_j?69zGiqdp#SX@3wxt512M5B@Qz@n7(~h!rq1 zX|v-|-Pc<>L_+4H5>CmYyzM=%*`EBsr(fYe*Gs(ikbP1vu)~39JS#p_QUca=`DVg^ zYZx_6WJpLKhQqL?EsWHMDI0!Y(U|ksXBH*a5e$@q_W=yQ$Z!?#ahJkX>vT0NOAUt7 zjiEli|I%4mn3l!2tm@E752{*;gY`XUThdg)HVr_B5dH|2CZ*b<54TX9Pts!AOtNAO zB$BPgpGVhgnNdU>^#6%^&x_RjvJ$5}$~GmiT22nsIG3bn>W47-&VOa9P^qvVH+!0O z49&#E54W+^d!$TGn)x(-caPGGnIRO%YpmUYg)P?E+BOUgbHi;tff7V6XGiyabkp@Ex)L&wON zHA8G`l5yJ7aAHlZPfa-s0bkz>c$9l6dz*f#VtlI=_|1coql7%Sv4H6UixcB=^en5XMfltoWU3 z#F?`~A2NquadA?=Yp@kls}l%CYklMa(}aUBjs?nyIFvzQz9E34L^1r{yCB^3&J;H+ zsZg&`HQpiE07sdZUZKQ^^nJ;6--=e7+N{T_MVTbr9x_T**7tX_d=(Wlchsu?Xk>kl z+@vO`9Y=d$+GzaAOBNTGJ{jLi?r%&2Gh4(&na~-_qVrM`q0>PmWIzlY+3e@2wpZL0 z9j@I%9}NK|f=kAQ*vc^}g3sSjH2$s%7x4m*plow|lwzr|nqvv!{!2pDzVfhymuwkt zix6(60p?hnkbBT{ueD^Z5^M1CM{V;HINcl3C&b7*F!+HsM&^Z}%Ld1^i8JNv8C`l> z{L!8<)hG;Ez`7oyUlb#0{Bfs%(m9=QNcgaq+wgqp_+30PX+<|;9H!Tjm8}9g?Z|v3UQH3lv*SiUP_sI8gr0dI3 zdvtTo9iPGg;p;xUvs17phLK>&jBc9tGfF8RXBtIJQ%24zpZYN?vjLNMX#Pn}pR(=U z1(52wGLKevCN`X(qgX$!$A<~X+85cT2y~Hka)3~8;rDagDt|qrtu@IvHyGeUm)_B;88D{={vc3{(d7l89taM zm&D8jfIS{-wUkm3?An}5sS}1~gD`^Gey%R~cSBB%D}5|`qA&u;0WK9h zah$S#ZXA-Zmj9$dNtHV3@+>}&5qz8kia*>~FA}9P72(CqKG@_vO(w5mwwLS(&ry%) zL(CDeGiAI~nhf<|R+_P18?fz|+6xVq9hdH{K1@OrP;%(m?1s{s|ryj=a-S4jn zRcm*igG59~$8Zl3yX(jHUrWCU3!JWetctgmm3xSu<|?`t-*vMe9wy~-55^1|B)}bs zvQH@{F`CcQTV_RCaGMYIj}p*5JPW=bGXmP545%e%Acm76UymH0PM8+@KTnti2j86R zfx@unb)JCSf31>zwkRnM;{Vb&{uSm`CTSW9;`pCPXuuG3U>Z`j?PXhPau^zy&pfeN z51!P!X3l33FeuLBRm=LM8ABj8_?A`z6!oW3H1R*5 zS+MDY?OO9>tXY!J97i;z&PJkkb`_-+Q>+^ZXH~q&OIFSxn#!*5Or)) zDRW3UF0RA?`^akj7so)E}+XIO-{#l#EKtE@2WYHuaqo|xp!ttBE0$&&fXt&*7 zzSlohss~dIHq;s^vlUX&y-OND>2E_zd%FFGy}qlkIS*r8OjkQX89pnSkXtpIZVz4P zCaru^Jd3FDd6F=pik|>FQk#J~_?7nuQUfLL_vG*Dn}9T+vZ~U6m7?lCKgB5FF_b?F zhxdsO_-AfU+?^b19j?;Wx3{l8_A9>~UBU&{HaoL+Z_M*bUiQQMbALaL{JsqxPCfF_ z5fL9>U$!+^I=j2Ib!T?;rmvT;V0*HkZYSTbgTEh~{Ola+zS4%jw{`@k?gkDv{MvPR zX>0rs!5JLvdw1ykKHm)acXYe+cJDDNdWyE+#k_esy)~z9fk$uuzCNOo^JHwJtf73G z-QV4xJc*^Zl`}!%=$zJnl z?|+>1>(iZ?KCKN-FBx+9uGAtJT7D}$c234U9bRo8SPQ)kSTys~;@4Qgj%>>k_I~-W zb+WYP-P$|coMNaeO8!L}xJ7^cZEytLt?CtTF3*8WB)@Z|f-$Q;Y~ zW7orl*O#N0T$Cwpnw~*m7rA#Ix=Uzo%by%US9j8GuWRbyZ|Ca>3)bRw`1--c<97O8 z-6MPfk_S3rzDFPa(1XF|G^aqzJ4f{=rvEiEQ7aSM+O#8dv))Puxdsm-|24*d7H zv&7r?Aq=QPe}dyqc^2`6WEZ}-h5uybKdYuy)IfHLLJPMabqsg7z0y~cSWiidnMCt0 zyv}(hGMSw#UoyL~UNWVbSXMk4Mj->;@DfWRSY;=}Q8RD?IdmsT{`M#ZO7FQtcOqRs zlNCh0N4_S%39L29S%qcXi-v}*2ELc7bzi=6dqIbDb}b|GKu(_CmjvX0r90@_A}FaE z({7uaf*FjlTY6bDGi2Ft5y(zbJfXjNDK~fgK5#k(k_;DR_h@Z2hi8gk z88=e|%wRWFBQNs=DSB@$y2wubmz{YM=(}xUTE!vAU1&pK33@bGOYO4Ke+0zknVN{Yn3>uT*eON#9G9Mkt;vVO`!9FrO2G%HjXh}BbMHLwrI~ z*+20PVzL>U_E|#k`NN31s=>|#H1b-w5h(_8p**#{8_i`%OPgQkW{%9@Y#@R;1YC8UBOstzrXz9_zR zU1r4e937>c$6i-BuS1a~nL(zKWLO`_nc@geI!uP7-_AzE<5dZmV|_Nb-fN1}E#E>r zmIFKQ&+QJBA5V3u>jyDR<)A(!t97{PqlZMjgqV43F?waMf9J@z0gSUAM_?JbgoLXZeA4c|L!pPHkTf>j$znOJk9X?wr7+Ll@3&&so zgXsGIetc~?y#@|WARzEMARv$4FgBPu6;pnHF;wq z?mM&quyYYlZ7Q^lGchj2A&nwkA?zC_%IJJNY3=Q*poRrAef858bJZaZtf;E0>SDQ! zDL*8wIh^NFQMXFS6Pq0=mC(3f$rf97HfeEcmR%%yyEws(#7FXv;X5L?)u5QuVei|yf`&MG5Xu8XulnUXCKr!hrndsdP( zlT#J$b2U*5@Tyw02Md3_K#QN4rjuaO-V~DwD&^yyoUy70_6zNlmi0`oCp@8xq3-4l zk^QpLsr63DoeqItF5gJHUXX5!eCLzFJe6(lv#d=dNSm+)yO75U&xY~U(^k!Nmqi4& zESQo`*mAKqUfodAn7-^bSiDi2i2|lY7X&}Zc!%qzjP*t~=b<3B4wNe(^aHOM?&tbd zIIoCikX<-6wKb6QS}45`dBSMUN}W6bd5(j84eG6IKx8#DGhhFmrnq&-Qe+cUMDyx) z>Pg!cVI2f8qi96X7JF_L4(AfaMphF}5k!$|k8s6A?4HjS#{O}l#NhrwYnp1z}Deg zBX2W~P^G95`lI)OcFr`%{^^E~!i#T+pTm?!;4fIaFuSS@Y^0KRj|ycvM~YC82YrhS z)yTb`|KfI|2@yG|EwM@&A3kn>?0U_Zg(qHN( zolatpQXNfbwh3ggHjL(zh5{=NmT3k9dKzG@%|uBA90;_v4BSsX0BqT}q7Kt+>Xs@9pMtHmJDO!9dWj$VvQi~zzrd2PJNCFg^ z!Hm+~enqUqS@uj`K@hNE4eAw&bN%)NHirD>F2|gjf+}h*Nb8vxo0rq44}59dAtp{e zHFm4w<#5i;Vq>UXoTFMy8tKKngbFmsPjo{cvMM76C3m3yjn+?6^-0sIn@AG^A=nRi z^M&@=^4Tz>>{?Pf!lQ$)Wa|r%PR{WrrqfpI10RL!0~yO6#*w=@js`CT$-G}oJL%1A zVr>v;>Os{ELurEr6;<~Oi8DsTX6ZH^Q|&h_A@vaS-8euGN*5D@+ljU5Hv$CG0_)XT zQftDf$y}7&LF>%guTmZ^yK!60f^Y0xz`bdFP zgfAF1vx&o%l~c~aC{^8+#|IH22YERwUK~xwFz-o#KjbpJSDO1sG-=c1BBQVr5WE;j zdL=W>rm4v-|2c{#LM)+mYuvFjccX?0r{HsGni*;#%9a)fCc!KnMSSbw4RVVh-x~@$ z-Etrzlk*sHfJh||Y19Lw&vwZ)>5`o0D~@i^1Dj`$N8u@rkOjcx(FLGBaHnh|ZNobL z4QB{I$dlO%7=liu!Btc>!IH*&;%}Y`609THi?4(zA3#ny?YEZ`ltCLer^(5HZvjK6 zDbL9!pGN*MGM(#dIDkqpZ~!s{LWO|P%Sp{lKscB53OBIvzsdNGgN#+M88IWU(xjuL9>wuU%McQSHULwe;X`BOg5j+!8E(gkB^k>> zzpgh*A@Rl>Cw@52e>q-+uCt*97c`N=O6wnygjBB%Bn^^2q_S>+AQ;K{Kuh6;0_woX z(&B;G;w=1HNGHMd`}Mw@ao+5`KF#svYUm3eFDw79|2Jn^?>s*&GDSSAWwMy&93tK% zPvO;J3Avgoyt;UxdsUa;1m<`f_k}I335Y4TR1VagLX<0p=Z@`1G z2_Z3Tp(4i9go5!_^z&Y|D8$*(?B;Dc#-(L)@@zUEat~i5R!#8AHPpZnTf_{Amsl@~ zClz!?i`=mUs+a)E#U6t#!3NV2xSKcvBHSfmv&Kibq?&NcF8#%Oy~T$B z(}{y$hc87WZNWY@!IfMuyK{#cqVQ)LGvdou!+{n`C2x}0jvuTgeVCJ3M zd40fEeIm2*C%y*~kP~-K43N90{cmuRMK28b6f}G)3fxK2?#ya(`>?Ac{KPR36ns+2 zk<1beHUoC)<9VABR5VxCLUIh<>L(U0Dk)m;ir8D8H0jO?(WTJ`{p8vz4H=8C5?f)A zv>q{RJuna}T1y-F0loJ#j<@{;;wsn!;-m?d04b*U%J?U`yfGsGh;~y!l+Xtz|K%yA z@X;M60)23SashT1r^VjA~2V6Qt^eEZR2L`_8iQilX?)67}B`yRUTWuu(u>V$s zL%WwW8Ulx@K8M6OnN&d5_Qo&I0+JKM8b@~^Z)*r-q)`?epn5OH_b-jotb$u>^E=3V$k&6@SVnlS8d0!A)K>lT?bLys0X zCDO$6V%Ze^;sV<&SwBtL;Bs>ND)%q#N_9yD7#d-xMb{Rplq3xpeiq}42duu<#qr{a z=1lC~Ir+#9Pb{N`%mCB058rjxBIycsds63}#^7^-JGj_voXSDmxK#kzU`#FXdWdbH zpBBV`a|2TErylt0RN6zuO%D`}s@$XylVX65HoMkU*SwCX2E>LpO6`1kT9#slxB~~0 zdy54b_YV49*K0A7m!vTiPm{>=?Q`~&5#f;-7D*C*9Xrv&Xr;vfPxcyai)PiL)R`5j z5u?Z7sWE8YSOv}rp(0XrEiPNyJBD?G;o3BULpIoEj(dNQhMB-^^mbSau0!nh3XN(* zVy`XuVto?*CQe`}y`7?fF|AXxKqB%?g8)uE)C z0Twu=VH_D3%)3qe9qO`8ZyCN!= zqyoxG6hp5oYNMqX|Sa0pGnuL*FB|e%@KGbjDr-$2Kcp;~0LL_Ye zrJkU0?O({JC^#iLNti*%@mwdKFO3}#n?~r3ke0_ndKmV?BUnzO+`3@LBKV87Mx`hX zK`h_^-+Vez?$8x&8A1BJ`4b4}b>Ld#ttegB>&}CfLSm}n$@Tkr>S;-v>L@a6Ug$>X zb>E)`G_54NgSiwd0`u5Ia>5btYTWDH(|dH#rHnXIQ>)mU;|eX#C9UgmEw>j%z(I4X z#@4F-X{$AaxLhEXt&;bk52CVk<`%caSk3@xld!=mh^n5+Ln@EbU~%D99jsa%yf0+E zjQ}U<|Lf}p|82_3G8Td#_#9z5c~!v#Ay=g7OqH9uY}(+}1}Fw8K3TA-Wc?2t~T;GKWlWm;TI# z7*^gB@502QbUzlNV@-CCgfxLnI_!c>n!f4B8L^<(7g_oh2>2BW=yf%UGe1w(*KryXN-;fM%1z}vI7B2NbWl`IK|QwZ2r36z=q#~K(*QihJ84SfkH#z}U~S?{xa^g z1Z647uO%=+(G~<$4*Eg$Ze$v8S|$w?QFkg6#}ZwnO-2R4wqTK$sfF);3Ns34jUAb9 zJW;YPgQOOpHXPRG;IIl7#8}7USCJA9AeJE@N3@8`Zb+b86I!P+RY58?5kLz>>_-y$ zX%E4;E9si<4i}#CnRAwDgg=PXzNa7N(IN>%V=AA;o#6>~DrKpy>U zw5`Rq@5>O;Ik2IA(`oE?Il%H7JZX!5{XDvpXtn|~FxGA)*C9Zob@;*&h3OFwF7X$x zt6LM3jJ6k7RMM=;BK4AEMs-4*aMX2pw{T{#)Ks2?%hFOW{f__vbZ$Tm{|Uz#4TcWC z_j>fvHzGUtXC}y6#S)JmWxaQaz}Un}FfLre>^i&2Cagol;wfszsN|4EDADT~c50|y z2DVirc#UR?@79nMkTF}pzp<*t5Q}+ogUki^s!PYDv<(L^1ApE~^(QEA+m&UcbtmO1 z#rr8IeANQ}v1m`R@5bbvc;n%2E_C~{GSQ%K%M5<1dseW#u;&n!#T`iluv!I!adpMkg+S#BSYd84=(I5xwg zo)#PP>`FHq+W;kwrZ)RwGLOLC?5qxYXb>ep3$ZCx`{5AD#+CDDs-~i-OOzBo(X9IkB{j>bJj`)Xf`VT$T zH39@l=w4>s^b<^43FiPlXFKdFKwei@Tqlobs6QOk6%$J>!IjSp&bdM4igc{v+ftlh znKw;KrK83InUb$ieO(E5aMUkE%4T*HVO&ObNUMgb8}?6|B^kzF1ippED?VUx5H4{N zPlJO~F$m9F_}hK|rnS4~E}*#M-JYC5a%l$x&kt8*9R^CvZsu((#!@8NJlg$3)q2Hn zlZVv?nV2+X=K%1le}NERxtr`-t1*mi7$aiwo9o+GJF@qAzLX{tOX_8zAfk@&Gw{?F zpGLhSzHVIg%-hshd`T9xVm0TXvE}Ux#~RsSqt?C5I`rfcZ++*K=E5CteY9X}Rr`vZ zh9rl_6yzm5A0}BUkQUS^P+uCdFD8u4(YedhR9O=LOWgSVU_YU=R?L@<=OG@os23nP2#;&M&?Ka zXX&R0u!^DsN^*564sK?4(+Gq)W@gp?3RLtI^2PpQ%M7efbO!hqy@2L;I)SfxMa6Jc z^x1}Pxh9&hl$3LFa3tpL`kZD`;glD)MZGDU>#hHnE*7!Wh_@jpG(48L{Z{utQeEj$ zxomlVaXJVpdrzAV^E0nsI-B7v@pH2M;$rYuG0w$NejOkbm?_$W{R=5gdom$zM03>9 zOY_7JY>CS_i8yrsQ8HZ-3eJ7FB*+ttATN4ja%t$Y-yuH<)6xeE3}t0|#G2hEKOZpK zy_m5Z^C04gqCz(3PQT#Wjwv+ptfrIa7N(6&V}urG-5bG71VWRMqr8>&;)aKycu>LX zE1Y2J3US?Os~Jr~IBJ-Nl8r(z9*K)#q>7e}3+#$Od-dFlUQ1u&-G`2gE&Uc5c5LEK#V)W>qo3%KH zUfg>rcn#J>B9T$Nz5;~?PJA6j_oLAwhxZ!hLl6SXuSkpQIFU4>%E{!R0N0TneegJH z-Pe;d-9tnbPr)BnM=i)CKn7aq!N9nWGj_dVH^^9#3Tq}&p~9^*xOZjnA?S=)-R+2b ziPxplH}B1$>@bSUDI<^*$JGmlPwO``byD!lh@RA4A20qzZfyQrNiyGo9Fbz0yqLt( z84a+|fS>rx#=oZim7`);&shWuI*9epDzMN<;*g33>O#f|3O@8C42Q zE6@aoAyo9>$g)SfiJ=g6q95>KuU;hq*2IYz5lkuJa4%!m>z7-=HRvQFEaL(P{0_Mf z!DEkZsHdu4E{gCejM5l6fx*d@xnqr-9jULeK7mW3e;vyNcB44y-Tk>;zss2F-^{wrpJ>_1Q%#IP^vQ`jKiq` zuNag3-6?cd$iM7&P83)T^K+!$;lotiD`vwikq`guyRQ zZN7{o|8;Rx1XfQX{4DFi2xSv3;a)mTy}favkz=l5|D>XWtqAKg_g}d21sx`62+T>y ztM{2pK|ET9671f|Ec-ScRbBH>#p8qO{r6fostJBredv@BG!Y1fqFT}H`)B6B$c)_Z^S>vp%qu=~|6qn=$^9&!3&zdd2pE-~ z%~9$r=`V>$59zV7Py69W^a^^Acz2JdFZv60mV*6h<;{ZVdVO1YaoI@~f^jn0aA-7w zjpEIEj`6pga_X*zs&g!v4yj}<6BPJOkUSrCqSlN^-Ql^eaON|6`Ie}nnB!K)PP^2c z7Mj;lC>|yZKsf41gbO{`Lr?K7trn_V$fodHg*jc~di_8t5$(L$1|Fli{mzHJ>!UAB zEvkM|7zg69v;YfeQKQ5$X&t_^-i)kAZfE5bJ%0mb$ z?O=*>I;1h29>_T$N98^7)~M>0DwlynQ;M<(%I?JT^Eg6P?2z;MFeFiub#W0W&#$&Q zgkXw(WZ^Fd*K8?l+OfQ!cfQ=@7SS2p2l5?``W12Ax#hQ{ z9PrdCcyoA@OM{I894?KSSh{JLVq$BxT4S?1!#f!El>F+RXrPh5k$tOcI$)}?r$J}{ z2%q^|awA1#FMURblU8N9~ryUs^XR3n%~9Ar5+z;EMR@yYNhm7 zqI}3$L?JwKas&l^H8s(CwTHV!@K8en5n(z>Fd+#(y*u|3-|B92@GsDn#j(><38D=R zuKMmD4>P98I3||7Jj;Pi6lsH`Jk26B+yiBtx%@mN<6dMfV8&l zLf6rg?X0{OGTK&=dwhwxECVYn8TDSazwCI);}VHXG7ljrk5zs1fqzya`42+t!Be^; zN@5VHIGj?Xp6|kaBFa_xF4vIml32P zj?ELAv_PJ=nHJ}xYmTKl+0ylH z=z9W;(Cz6V-Sh{0;>hMakRGTsceqE(erPd2oSiZ6S99IrWi`6n?33f9*SKTV8R`(q3+B9_V(KHz^=Bqo~=MACEL^Z{#c zQi91yj9cXf@f<3V*!7JVma!GGlsHza#DVl&x;n~5PgKmb5)9bPb0}Ds-@MI{;Zxfy zjY-RA8eYn|DkK!;tbYlM?SecOPh#IIYrv&i?-Zkyk}6z033`4_3zlRjKh-F!?}zDj zw19i@=gg($LMl2bt*#1c6nB?#HGaPN>>lUQ{@j2X|h z0GA{vKV>dOft|plX!Lu=$8SUYJ*qeHX8!=cy}8#|!_C>eAwK5>ykUR_>%&b_`xZNq zC4Yci*uMb3{UGdVDuMFXng=$_zV-lqjoc5fUNdiJesKiZB|kjEc^9jcJ&70y`edpW z8t=E#W8_G}Igz}G8rVRPh{n82#!yc0ChlfnToxhX+=G(I)&~7xsRcHXGP{J#uk{D> zfsACaDFOle4AElJl`WrU(9Hq`b0e(D%3~X^#`2zFPS=>}6@TszZ^MaO!}Md#Z}JtR zxVmWil=7%7`<(_Gp*>loSdjP957C%28dfqQ^q)Zjkp=J&-w?CdTPpCO=jC)zC*DZp zd+)yw@q~hKXnoY+^u%*v<}7`Sw7^BfsSYeA9H1eYxV484tKKfRP93ALo94m#P23*m zTgD%@wroN+mx9vrUej2l$!K)a+1{W1vK-Vz_*jWvK2)>P;O5wDPX4m9Wv3O;E58dI z7*6nYVv$V%K3s4OBn3CLd`DJ$rIkCX#{Opdo$>@ZTb32lnN;2$Of?$M6OjedDckx+ z(SvzO>&q6CCY?_$_;v!#m-E(vDe%|dvupH6es(1`xMsW}Lbgt)JLqQYTZ#mA>UtDs zCKFiKmw3TvbTyRUdXgIUIhPqcJNA+<{5cOyk z&6#iw;WcnIy*fl6Fp-uMVc21cpsM;nyK_tffu{(qm%1GV6XEVy!F+0zg#Br_VA`rG z>W0(rH>Tr~+X3R9iVnlGXvob8~i% zbJlZJYFPV@wM(635G)Rrg}u9}&aucpD?Ium=jHVk{ZDenwj;aDd`Gv`wt_4}-S3;T z4m-D|i_D>xyHV~aG}A9O(k8d0HqYd2vIT2mX(4buNM7;Oih3`VvVzlekK#ocJ3sKX z!)i;MzoEdgY@am=P=2jRWhulZ6DJUWN;t-vKwOF&igZ?et}{o%ZJBF1j0l)n9lmY- z=8hsn-;~N65vGkmj)%>3WJR8nMC#PQaqJt&9`45v;w0-5NxZdSjYT!kZE5@HQJ`+LFBd#D}IK^PV9qR_!d> zRCR@r7>U(cO+dELt71-?lRCMD9E0*BkrP&*vN1E8-uV#7G@~zY`VE zj>YraU2e#pJeP!E316cy*xYx!l)`c73*CzA72a`rEx7RW>0Jte36TcB=&iOr^e>=Y zoYVyIX_*VRXmGE#t=?b>JwEu(^qy>(-#Gro@)V*h&l(hCRraYzzW3yQLm#rjc7;S= zZv{H=r2gwz3zlOh^uhXSC&P$|L=>UMYGE}2yN>y+GI_3oG1=;u?1H=Y`L_CcxRe(h zhoAGksBsTlfW-hFH?Ouxz%Dca-H7f)P+<=z{4#iygo8Du!Bkf`DM;2 zo#*S?1k-#5qwZ_=c8*m-*-NbC%azeDP3NR4+SIvL4H ztMc$tp}fYIEQ*Tb`gaU8&r*=nrbUQhUwi)_l{oO$&9GcMImd@pprsYzwG9ibC%cu6a_k0OH(*vYpRDg30a1( zqtH7L`TZ(u-5jovrqhAVBP7$s=qO)(>K(ZwRAO1Hy}yID$|3$2C3AwtsuG_((owA) zJ7C9Ijy%SX5De*nK7Q0mqLBk7#eI?+eGQEm$}RGla;{A}`g_JsV3QmD*59gf=)n7}3@USLbR(J=O%bq-?a*YDkDP)yIU&uA=wF_5C z$_zYgC{0Xp9ox?x$yZQ48uhWb^#d?JT0>_1T~(4f2Y}P<_(%EGO zW!HUel{16G3=!)6i`vEhm+Cxhk#g5?uF&Y4%B6fj{z~Mp^3-8q4X<>y;^E4zMJmFM zXgtpPGoLCb)lC$!skX{p6U=bogSe-&ZqJ?(C=%LbLoaBgN9<(YQ_K+`WdT#*{$QpUr{ZJKmu-1x>2J|S-+O$tcH1OnvW zTSKUi=!8R~D*NC0R6)JDZR`jn72B zqiz@LKvq$3ncHsKJz4}5c0X@mcs<;htl5Pa@2%-7NLb`2gKboeE9unOJZg*{+1s%i z6F3q-syqIcg~;}R>Du|etz#Yn=Ybp%{CM@vP&3{74A3euHt$3kYw3JgQMfKx!k&ty zBU;_d2z}ALZ^36K?vhHsO3|zp-5+^w2gtaQf-eZbUtsYiSTlJM+|cc_OU^w7w;xcF z*U)XSQ@QD-4MN$V&Uo(mz6M8x^+PClp$@j=P7yx2*`eys%g6fUP-d8~KzjXOt*T-MlYA7T1XT4|#MdvLb2z94k8cMj0zrLUf$Mj>c~{(S!5i%S@J|4xFC7jIiqxRWv)+DYR_~Z zF0tZTn^b9Uwrp$b=x9sY91ot70$^bg)+Mbkjpx{Ve_K1#FVG45k63YH7jbA4h;^yq_O9b7X_?(G8u!mg|1enXH_o-P8tH_8oymI68Tu zX-(=5TrICRBu}!nwHufSZ0TmP&aK`qT^;TXoY{jv_FJ^+OkPy#QuLk&sMx>X+uNUF zT&=FApFTN`gMeh2RMR)rJ?RjtrdoFUv}ZO0>7nVCv&NU*l24Y}ZU+Te2{{VlR&M5* zg0^dFgNh0WO6P|kj~zd)pRGHF$n-kiHrW)_(%y2Sui4z}8#yv_2Rlhx^9tS`pSP{B zZy!6mGp4Q+piWiU*x1#dmRaAtdXEn%(eSyMm07j2ucOEx++okIua-&lZ=K)qZU9@y zJgX}P-^ysOOPl2*N48vVOz8rNf<{p2$``pCDYE89iQ*nqfgir9WuUx zWr4Uu{Ae{q)|mi;5GA5A0oYy^0j_Pm3}`9bAi3)qcV2(*gn>Q zW6g|Cj$hedU1iZDBwF&-$4Z0LI7jED=e<5e3MEPF2q>M>8DkLvqI^Q=2%`3&4;&&v zyEN_xH{=1hlQheh6~%&XuFt>qrCe_HQ{rO>PQizX<074ib+>C7QFf+)K@26AVlxHq zj>6lKQ$>)asQFF&Y(7e`F^}cIj%8s^lyiUzzuDP+>%*cmtv14Y$zJY``ML{njiUE$ z)=1gb1e!|pP0;1FwAn6dNf#O8o<1+!T(v@Am9j&Iv7rcVQ#<(L6dLgdrmjv78o_8& zC=??(+-!iI`*Ls5>)LM=Y+hTqkSJdigw^g_cY1*+HXqM`CC|;<0NF9KCYQ$k6OfMvajDXyVE=cBXVntdcLegbaMI zVVmf9(vv99EHrWGF+u()-AUBus2q;0ZJ_lt9$Sb?s4pFzd-PU>VOg~(ODIdb(+dSJ zp*h;#r)465Rk9k+7Gz00pTtV(11T1On; zlC52jzJz4Tm_QF7j&n!~aE?~t?n2c$t_&1v$GO(^K5RbWJSlR7i!+a)|Y@ACT!0HdBaxr5*{&EI>OcJ`g+za zZ179>he@lRnzIH-kkqk)Z{iLoYc45}56yJmfzEOA;D zSzoZ9FUfiRX2$_(qdhX!Ei(brl&hXH4GGtITAML5NU8u2HzCaIvFYpH?jKv=YqN`b z5=^I}Pjd4`DmEtXtr#uYF#yY9c2rnC1uzZ`c^VEy-$lhU8a ziF={+`%P4I@x8+XJ1@#DygC`*u_?03*Ew)>2E zf2^Y$oocac%&$t?P?S8XRxrDJc({QJ_bi@~tQyVAH>s>&t_-VsuUrlBLvMIYpfe$$B={JL|nRF2@;yP;~;eer8=b}*O4 z%FGnn6wW^avlO{15km6x;m)>0B0#RV`aFv4`oYBkp4a8$jR-?h1ncD33cBCbQx>ON zkj`EG@#?}A*2VqNF%>P74PKRlEn}t|Pa;Ns1}ig>e0LhJK_^1zMd-Sl_QI+!P0or+ zTHej~en9c|s8s`!(amT>ry9x{*dM?uIT%F!#k<(~x&Xo%p5In)aOY-(Nv990;3k=n zyt_iUeX{N-Iom7~4ZO}vbO9^Vf#>N6u3#3U1T6c6bQuoPfj`=?Pnfoc#cv`jQ>N-* zEizvQd$;)M(gbjn)8tFr8L050}*z7CV4nKM|re}evV%XSNh zoZN-T<7CK&n`#>ng@OT14OO?P2~5 z>*18?&u|lS^T(&L<84_R8M9^t%#Y=BM(?w>%TA9o`sXtXpsmyQp-Gu*2lsLBkI1(Z zw+Gvqr>47^fl{tb_4_4Msb~MbK#|Mo^7Z*pMO&zb7yW``T0mhfr)w#Mday*yEzN?q*y6xku zw(Z;PraoTmxBWZIyY;sGE-p?FCnrB-Cr75SLJ~~TGk71FCOouvyNIZ2ot}i~>}ea# z^{dm$m5aeP&q$GO=DY#SVazI>^r_%3gAAQyC1Qh);tV}Zse-RKjW&Zv>E>r(sz<{w zu#*G!w;J^fo;CPQpV^{uon?V5B-eZ#!@*QSD0wF2MnZO@C~$obvGV*G4a$OTSYOHB zk!2-o#Au8*STKs~yY;sm->;+j1-9}DEuXgDi0Q^B-i=YuVSn`pj-t4d^-uT>b6~H^ zS;7Z8La+?B-L{Geb-Ix@rc_V5?ezH6A(wZN>y;xrih!TV@ZV zIxIZ;U@4dhs5NVIUHil7`SfLFVBO+(h39)ToCzCO`~Y;$@J9<)=eN$bSD!m|?df2p zrEg~MlwnjGI*$DB#OZ7C=G* z!s=NR;VmN_%*gTLTE6f>5rV~-*dlU8!Pe7t$N>Ygi5}WLism5@)P9iR8QZ^h^WLfP z#(+7dPCFE~Mv3u%7~rct6dArdoGX51mD`^x-W<^htM~RU;(c+e1{^=j3Fm4(x!FER zzc+e3-b!rk<$U{)16HaL)ZMdHvR0V1s-eM2ZF5w?#_re-o1Jai{LcQyoZ`=HJmX_k z7>txh#&)HVG}*v*XGPNKWcONR6i9ZK;i9F7=gVx4=uDQIwl+#8geKugwUkckbPf6- zxvF`!dP8WNK}fwJOoDjxatxmzipWXx8>dgB_Yihe#+u^WhCVw3D3w0sn6$ zxxdaGisj*tX?~tJ{Hx;q^SMJ6Q6V8o=qXXDi5XZ4YKqD6sXBSOdB!b!nF$GMajFs8 zT6t0N5h|KcT8L7)X}W1f`f0}Ly)UCvv@^e{7GcS##V1B2YvswvDWvwlh)Fhms*y4+ zPK-@SEJ%%)?d<>q{%#otF%Tugr$tsN8Koj4kJ_h@o)n#sqLQ8*SFBdzv%TBdbwFag-Px^(b71I^r1_(1H>uq{*v}@R zKP%ZkH|=O+t7B>8Y-IUYyOjUa%HE&7c`x)IRR941%D?~s{C`Hu3kk@`3wq6u*yoEP zfNy#5LO16w!+Ul6BH$_G<2&LnE9q~7$?#sJ*g{;SUR6lzyrssb3cQMz*@oc1Vt`f$ z86dPbP%?0R=bPzTRyFXXgrN9Ef8LjpX~D5qqVC=rv=7CJHbvmsVIDtW32I_?GE{x| z6Jb%O`4n1Hc--}O!L(jnAEw4gF*a%6MKr@Xyxrw$CsZ1 zyON9GJP#3~HFXi}YPK#?#GtZ7%NAyFK3p&QmyuC8SlZFV;GE6+9YQV)g>}H_9Tq{_P9}`Km&M|_-yQjXS1!Gn&TLQm; z<~l*xBj!k!ep%KhS5MSHdm^zH)Ts2Wm%3)cy(3U7m7tuG&cOri9^nQ%MO-wy zvbl6Vs1_oyrb|Coc-&PybQbvn;jsgRgnE%bVNm5}{`B*kL{zo!a=a49J>7=d^F)&j zst46Yf;3&RMa1=>kOz7|MwN&};>vFn?m-F|5Nsf(NBI+`Ui(ev4LjoOpKM(XoFpm% zq{dIJjab-`dkVLCX}NZUeZ+lJXrMzFajOQ z*Upo!qy|ZDWu6bNph8qSn-nzlY1lT^%GCK| z6!*)ejv)`t8xVi?aw=*gIYN8k;*-5fOnxl4?%fbv-efoH!6lwOn+({6JZ9W9DD!cL z^eHXu%X6P15w5!>8=7?T4M(r^boF)Q6J_%3H--$gb!kl!UFukH$jJreU?_C-Jptqw zw_C`XyLk12>L4LH4R}%8b^IIsx@d%6tXPo1gW-x9I zdOJrM9TYKeb89ZW(bHMT=Gdtp+PfGY`R5AO2%utP)M)dnc`}h;@;$6uO|Iy|w2=$m zE)^cEbg;zeu)p$qzkSKP|~|Y*E(d!6~u$ z)B|M_0|0RUMv40Je^7MnjjRog?Eip?eVP;)kdwss*?|iv008B0Fc$1TVAjTFCV$#v z`-w2@vYj0L^h`4(0D$&4L@D0i5JrY3pN_V-_!A-;p{lG-MuUIxdGRw40Pxqq{i`(k zl@R_NVsCF_|0iKbt6A9$=%&)))45SF0Klhr{--qh4HNy1U}A4(_=hK4KD%)n!Yp3) z**fc|H@^MP)qf3+1^M5uH?y`hvo_K(u=&d&e}FtbL2Do^flQxTlMu{)-?Jx(Eg3!{0X>5M3HZM>1pnmynf2h`JUPdI=l)jPWmOy&rw$KbrgB5r?b<*r%lM SU$X=efcv@d^ws?J>;D11wm47# literal 0 HcmV?d00001 diff --git a/dist/schemascii-0.3.0.tar.gz b/dist/schemascii-0.3.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..3794ccf3fb611a79f99734bc52c16b4e08d56a18 GIT binary patch literal 57185 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 K`d_aAm;(SL_$(O! literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 28d28ff..1515c83 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "schemascii" -version = "0.2.4" +version = "0.3.0" description = "Render ASCII-art schematics to SVG" readme = "README.md" authors = [{ name = "dragoncoder047", email = "101021094+dragoncoder047@users.noreply.github.com" }] diff --git a/schemascii/__init__.py b/schemascii/__init__.py index d4433f0..48e9dc9 100644 --- a/schemascii/__init__.py +++ b/schemascii/__init__.py @@ -8,7 +8,7 @@ from .utils import XML from .errors import * -__version__ = "0.2.4" +__version__ = "0.3.0" def render(filename: str, text: str = None, **options) -> str: From b13dec1d91d093c11353ac0541ae52b7a51bf137 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Thu, 25 May 2023 13:50:55 -0400 Subject: [PATCH 03/23] Update schemascii_example.css for polylines --- schemascii_example.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schemascii_example.css b/schemascii_example.css index 22754ad..b758e52 100644 --- a/schemascii_example.css +++ b/schemascii_example.css @@ -2,11 +2,12 @@ svg.schemascii { background: black; } -svg.schemascii .wire line { +svg.schemascii .wire polyline { stroke: var(--sch-color, blue); stroke-width: 2; stroke-linecap: round; transition-duration: 0.2s; + fill: transparent; } svg.schemascii .wire circle { From 2f179115878c73db2ab29651509f524492a4c4c5 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Thu, 25 May 2023 18:20:40 +0000 Subject: [PATCH 04/23] Rounding error was the problem closes #7 --- schemascii/utils.py | 7 ++++++- schemascii/wires.py | 22 ++++++++++------------ schemascii_example.css | 1 + test_data/test1.txt | 15 +++++---------- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/schemascii/utils.py b/schemascii/utils.py index c345dd5..41cf857 100644 --- a/schemascii/utils.py +++ b/schemascii/utils.py @@ -27,6 +27,11 @@ def colinear(*points: complex) -> bool: return len(set(phase(p - points[0]) for p in points[1:])) == 1 +def force_int(p: complex) -> complex: + "Force the coordinates of the complex number to line on the integer grid." + return complex(round(p.real), round(p.imag)) + + def sharpness_score(points: list[complex]) -> float: """Returns a number indicating how twisty the line is -- higher means the corners are sharper.""" @@ -95,7 +100,7 @@ def iterate_line(p1: complex, p2: complex, step: float = 1.0): vec = p2 - p1 point = p1 while abs(vec) > abs(point - p1): - yield point + yield force_int(point) point += rect(step, phase(vec)) yield point diff --git a/schemascii/wires.py b/schemascii/wires.py index b46207d..ef5cb94 100644 --- a/schemascii/wires.py +++ b/schemascii/wires.py @@ -1,7 +1,7 @@ from cmath import phase, rect from math import pi from .grid import Grid -from .utils import iterate_line, bunch_o_lines, XML, find_dots +from .utils import force_int, iterate_line, bunch_o_lines, XML, find_dots # cSpell:ignore dydx @@ -77,18 +77,16 @@ def blank_wire(grid: Grid, p1: complex, p2: complex): "Blank out the wire from p1 to p2." # Crazy math!! way = int(phase(p1 - p2) / pi % 1.0 * 2) - side = rect(1, phase(p1 - p2) + pi / 2) + side = force_int(rect(1, phase(p1 - p2) + pi / 2)) + # way: 0: Horizontal, 1: Vertical + # Don't mask out wire crosses + cross = ["|()", "-"][way] + swap = "|-"[way] for px in iterate_line(p1, p2): - old = grid.get(px) - # way: 0: Horizontal, 1: Vertical - # Don't mask out wire crosses - keep = ["|()", "-"][way] - swap = "|-"[way] - if old not in keep: - if grid.get(px + side) in keep and grid.get(px - side) in keep: - grid.setmask(px, swap) - else: - grid.setmask(px) + if grid.get(px + side) in cross and grid.get(px - side) in cross: + grid.setmask(px, swap) + else: + grid.setmask(px) def next_wire(grid: Grid, **options) -> str | None: diff --git a/schemascii_example.css b/schemascii_example.css index b758e52..617c61d 100644 --- a/schemascii_example.css +++ b/schemascii_example.css @@ -6,6 +6,7 @@ svg.schemascii .wire polyline { stroke: var(--sch-color, blue); stroke-width: 2; stroke-linecap: round; + stroke-linejoin: round; transition-duration: 0.2s; fill: transparent; } diff --git a/test_data/test1.txt b/test_data/test1.txt index 71f203b..a07ca88 100644 --- a/test_data/test1.txt +++ b/test_data/test1.txt @@ -1,10 +1,5 @@ -!padding=30! -G3----------L1------G4 - -G2------L2###########-------G1 -L1:220u -L2:330u -G1:earth -G2:chassis -G3:signal -G4:common +---------------------* + | +---------------------|------ + | +---------------------* From 457e461358c97aa279c94d7d14cd1bf858f9be89 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Thu, 25 May 2023 18:23:37 +0000 Subject: [PATCH 05/23] release 0.3.1 - bug fix --- dist/schemascii-0.3.1-py3-none-any.whl | Bin 0 -> 46894 bytes dist/schemascii-0.3.1.tar.gz | Bin 0 -> 57232 bytes pyproject.toml | 2 +- schemascii/__init__.py | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 dist/schemascii-0.3.1-py3-none-any.whl create mode 100644 dist/schemascii-0.3.1.tar.gz diff --git a/dist/schemascii-0.3.1-py3-none-any.whl b/dist/schemascii-0.3.1-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..158f25e59e908b8e9f62a23e49dc437a5b93d9b3 GIT binary patch literal 46894 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 p9No2%%s%7?(1Fl51SZo*{3 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 RwMx)H2tPKSr>ei+{Vy<-dFlWF literal 0 HcmV?d00001 diff --git a/dist/schemascii-0.3.1.tar.gz b/dist/schemascii-0.3.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..acc9f32436e702c4de4cc4e4a2b5cffeeb5673f3 GIT binary patch literal 57232 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 str: From 727f15ca9f2c6a6858071ff47afad3382fc2d1f6 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 16 Jun 2023 17:39:38 -0400 Subject: [PATCH 06/23] bugs with fill on bunch_o_lines() output this was being masked by CSS so i didn't notice --- schemascii/utils.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/schemascii/utils.py b/schemascii/utils.py index 41cf857..4b07dcd 100644 --- a/schemascii/utils.py +++ b/schemascii/utils.py @@ -28,7 +28,7 @@ def colinear(*points: complex) -> bool: def force_int(p: complex) -> complex: - "Force the coordinates of the complex number to line on the integer grid." + "Force the coordinates of the complex number to lie on the integer grid." return complex(round(p.real), round(p.imag)) @@ -125,7 +125,10 @@ def fix_number(n: float) -> str: Otherwise round it to 2 digits.""" if n.is_integer(): return str(int(n)) - return str(round(n, 2)) + n = round(n, 2) + if n.is_integer(): + return str(int(n)) + return str(n) class XMLClass: @@ -138,7 +141,7 @@ def mk_tag(*contents: str, **attrs: str) -> str: if isinstance(v, float): v = fix_number(v) elif isinstance(v, str): - v = re.sub(r"\d+(\.\d+)", + v = re.sub(r"\b\d+(\.\d+)\b", lambda m: fix_number(float(m.group())), v) out += f'{k.removesuffix("_").replace("__", "-")}="{v}" ' out = out.rstrip() + ">" + "".join(contents) @@ -182,10 +185,6 @@ def find_dots(points: list[tuple[complex, complex]]) -> list[complex]: def bunch_o_lines(pairs: list[tuple[complex, complex]], **options) -> str: "Collapse the pairs of points and return the smallest number of s." - out = "" - scale = options["scale"] - w = options["stroke_width"] - c = options["stroke"] lines = [] while pairs: group = take_next_group(pairs) @@ -193,14 +192,7 @@ def bunch_o_lines(pairs: list[tuple[complex, complex]], **options) -> str: # make it a polyline pts = [group[0][0]] + [p[1] for p in group] lines.append(pts) - for line in lines: - out += XML.polyline( - points=" ".join( - f"{p.real * scale},{p.imag * scale}" for p in line), - stroke=c, - stroke__width=w, - ) - return out + return "".join(polylinegon(line, **options) for line in lines) def id_text( From e31c6a04e0aacc0df624423c74376e9581a521f6 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Sun, 2 Jul 2023 17:25:30 -0400 Subject: [PATCH 07/23] typos, add version --- index.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 1389912..5e85d4a 100644 --- a/index.html +++ b/index.html @@ -40,6 +40,7 @@

Schemascii Playground

+

Loading version...

-

Result

+

Result

Messages


diff --git a/scripts/web_startup.py b/scripts/web_startup.py
index b4b8ac0..8a3b93a 100644
--- a/scripts/web_startup.py
+++ b/scripts/web_startup.py
@@ -1,5 +1,3 @@
-from pyodide.http import pyfetch as fetch, open_url as get
-from pyodide.ffi import create_proxy as event_handler
 import asyncio
 import functools
 import sys
@@ -7,6 +5,8 @@
 import js
 import json
 import warnings
+from pyodide.http import pyfetch as fetch, open_url as get
+from pyodide.ffi import create_proxy as event_handler
 import micropip
 
 
@@ -57,6 +57,13 @@ async def switch_version():
     version = ver_switcher.value
     await micropip.install(versions_to_wheel_map[version])
 
+@event_handler
+def download_svg():
+    a = js.document.createElement("a")
+    a.setAttribute("href", js.URL.createObjectURL(js.Blob.new([output.innerHTML], {"type": "application/svg+xml"})))
+    a.setAttribute("download", f"schemascii_playground_{js.Date.new.toISOString()}_no_css.svg")
+    a.click()
+
 output = js.document.getElementById("output")
 css_box = js.document.getElementById("css")
 console = js.document.getElementById("console")
@@ -64,6 +71,7 @@ async def switch_version():
 style_elem = js.document.getElementById("custom-css")
 errors = js.document.getElementById("errors")
 ver_switcher = js.document.getElementById("version")
+download_button = js.document.getElementById("download")
 
 
 print("Loading all versions... ", end="")
@@ -93,6 +101,7 @@ async def switch_version():
 
 css_box.addEventListener("input", sync_css)
 source.addEventListener("input", render_catch_warnings)
+download_button.addEventListener("click", download_svg)
 
 source.removeAttribute("disabled")
 css_box.removeAttribute("disabled")

From b323c9a295ad9a3d4d8e071d928b2e89ef7ec598 Mon Sep 17 00:00:00 2001
From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com>
Date: Fri, 11 Aug 2023 19:29:51 +0000
Subject: [PATCH 14/23] kludges on event handlers

---
 index.html             | 20 +++++++++++++++-
 scripts/web_startup.py | 52 ++++++++----------------------------------
 2 files changed, 29 insertions(+), 43 deletions(-)

diff --git a/index.html b/index.html
index eafbbbb..7847b02 100644
--- a/index.html
+++ b/index.html
@@ -75,7 +75,11 @@ 

More Information

// cSpell:ignore pyodide pyproject var pyodide; var console = document.getElementById("console"); - var errors = document.getElementById("errors") + var errors = document.getElementById("errors"); + var css_box = document.getElementById("css"); + var source = document.getElementById("schemascii"); + var download_button = document.getElementById("download"); + var ver_switcher = document.getElementById("version"); async function main() { try { @@ -85,6 +89,13 @@

More Information

await pyodide.loadPackage("micropip", { errorCallback: error, messageCallback: () => { } }); info("done\n"); await pyodide.runPythonAsync(await fetch("scripts/web_startup.py").then(r => r.text())); + css_box.addEventListener("input", debounce(pyodide.globals.get("sync_css"))); + source.addEventListener("input", debounce(pyodide.globals.get("render_catch_warnings"))); + download_button.addEventListener("click", pyodide.globals.get("download_svg")); + ver_switcher.addEventListener("change", pyodide.globals.get("switch_version")); + source.removeAttribute("disabled"); + css_box.removeAttribute("disabled"); + console.textContent = "Ready"; } catch (e) { error(`\nFATAL ERROR:\n${e.stack}\n`); throw e; @@ -96,6 +107,13 @@

More Information

function error(text) { errors.textContent += text; } + function debounce(fun) { + var timeout; + return function() { + if (timeout) clearTimeout(timeout); + timeout = setTimeout(fun, 100); + } + } main(); diff --git a/scripts/web_startup.py b/scripts/web_startup.py index 8a3b93a..360902b 100644 --- a/scripts/web_startup.py +++ b/scripts/web_startup.py @@ -1,43 +1,17 @@ -import asyncio import functools import sys import re import js import json import warnings -from pyodide.http import pyfetch as fetch, open_url as get -from pyodide.ffi import create_proxy as event_handler +from pyodide.http import open_url as get import micropip -def debounced(fun): - timeout = None - - @functools.wraps(fun) - def inner(): - nonlocal timeout - if timeout: - js.clearTimeout(timeout) - timeout = js.setTimeout(fun, 100) - - return inner - - -def syncify(fun): - @functools.wraps(fun) - def inner(e): - return asyncio.ensure_future(fun(e)) - return inner - - -@event_handler -@debounced def sync_css(): style_elem.innerHTML = css_box.value -@event_handler -@debounced def render_catch_warnings(*args, **kwargs): import schemascii console.textContent = "" @@ -49,21 +23,23 @@ def render_catch_warnings(*args, **kwargs): return out -@event_handler -@syncify -async def switch_version(): +def switch_version(): if "schemascii" in sys.modules: del sys.modules["schemascii"] # Invalidate cache version = ver_switcher.value - await micropip.install(versions_to_wheel_map[version]) + js.eval( + f'''(async () => await pyodide.globals.get("micropip").install({versions_to_wheel_map[version]!r}))();''') + -@event_handler def download_svg(): a = js.document.createElement("a") - a.setAttribute("href", js.URL.createObjectURL(js.Blob.new([output.innerHTML], {"type": "application/svg+xml"}))) - a.setAttribute("download", f"schemascii_playground_{js.Date.new.toISOString()}_no_css.svg") + a.setAttribute("href", js.URL.createObjectURL(js.Blob.new( + [output.innerHTML], {"type": "application/svg+xml"}))) + a.setAttribute( + "download", f"schemascii_playground_{js.Date.new.toISOString()}_no_css.svg") a.click() + output = js.document.getElementById("output") css_box = js.document.getElementById("css") console = js.document.getElementById("console") @@ -98,11 +74,3 @@ def download_svg(): css_source = get("schemascii_example.css").read() style_elem.textContent = css_source css_box.value = css_source - -css_box.addEventListener("input", sync_css) -source.addEventListener("input", render_catch_warnings) -download_button.addEventListener("click", download_svg) - -source.removeAttribute("disabled") -css_box.removeAttribute("disabled") -console.textContent = "ready\n" From cf32b6cf08dd10ff6cbf320f6a22e3de897cb41d Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 20:46:36 +0000 Subject: [PATCH 15/23] move to js because pyodide is being annoying --- index.html | 46 +---------------- scripts/monkeypatch.py | 17 +++++++ scripts/web_startup.js | 110 +++++++++++++++++++++++++++++++++++++++++ scripts/web_startup.py | 76 ---------------------------- 4 files changed, 128 insertions(+), 121 deletions(-) create mode 100644 scripts/monkeypatch.py create mode 100644 scripts/web_startup.js delete mode 100644 scripts/web_startup.py diff --git a/index.html b/index.html index 7847b02..6f750b2 100644 --- a/index.html +++ b/index.html @@ -71,50 +71,6 @@

More Information

https://github.com/dragoncoder047/schemascii/

- + \ No newline at end of file diff --git a/scripts/monkeypatch.py b/scripts/monkeypatch.py new file mode 100644 index 0000000..affc0fd --- /dev/null +++ b/scripts/monkeypatch.py @@ -0,0 +1,17 @@ +import sys +if "schemascii" in sys.modules: + del sys.modules["schemascii"] + +import warnings +import schemascii + +print("monkeypatching... ", end="") + +def patched(src): + with warnings.catch_warnings(record=True) as captured_warnings: + out = schemascii.render("", src) + for warn in captured_warnings: + print("warning:", warn.message) + return out + +schemascii.patched_render = patched diff --git a/scripts/web_startup.js b/scripts/web_startup.js new file mode 100644 index 0000000..d2b1a0b --- /dev/null +++ b/scripts/web_startup.js @@ -0,0 +1,110 @@ +// cSpell:ignore pyodide pyproject +var pyodide; +var console = document.getElementById("console"); +var errors = document.getElementById("errors"); +var css_box = document.getElementById("css"); +var source = document.getElementById("schemascii"); +var download_button = document.getElementById("download"); +var ver_switcher = document.getElementById("version"); + +var schemascii; +var monkeysrc; + +var ver_map; + +async function main() { + try { + info("Loading Python... "); + pyodide = await loadPyodide({ stdout: info, stderr: error }); + info("done\nInstalling micropip..."); + await pyodide.loadPackage("micropip", { errorCallback: error, messageCallback: () => { } }); + info("done\nFetching versions... "); + monkeysrc = await fetch("scripts/monkeypatch.py").then(r => r.text()); + var foo = await fetch("https://api.github.com/repos/dragoncoder047/schemascii/contents/dist").then(r => r.json()); + foo = foo.filter(x => x.name.endsWith(".whl")).map(x => x.path); + ver_map = Object.fromEntries(foo.map(x => [/\/schemascii-([\d.]+)-/.exec(x)[1], x])) + var all_versions = Object.keys(ver_map); + //all_versions.push("DEV"); + for (var v of all_versions) { + var o = document.createElement("option"); + o.textContent = o.value = v; + ver_switcher.append(o); + } + var latest_version = await fetch("pyproject.toml").then(r => r.text()).then(r => /version = "([\d.]+)"/.exec(r)[0]); + ver_switcher.value = latest_version; + info(`["${all_versions.join('", "')}"]\nlatest=${latest_version}\n`); + await switch_version(); + css_box.addEventListener("input", debounce(sync_css)); + source.addEventListener("input", debounce(catched(render))); + download_button.addEventListener("click", download); + ver_switcher.addEventListener("change", acatched(switch_version)); + + source.removeAttribute("disabled"); + css_box.removeAttribute("disabled"); + console.textContent = "Ready"; + } catch (e) { + error(`\nFATAL ERROR:\n${e.stack}\n`); + throw e; + } +} +function monkeypatch() { + pyodide.runPython(monkeysrc); +} +function info(line) { + console.textContent += line; +} +function error(text) { + errors.textContent += text; +} +function debounce(fun) { + var timeout; + return function () { + if (timeout) clearTimeout(timeout); + timeout = setTimeout(fun.bind(this, arguments), 100); + }; +} +function catched(fun) { + return function () { + try { + fun.call(this, arguments); + } catch (e) { + error(e.stack); + } + }; +} +async function acatched(fun) { + return async function() { + try { + await fun.call(this, arguments); + } catch (e) { + error(e.stack); + } + }; +} +function sync_css() { + style_elem.innerHTML = css_box.value; +} +function render() { + console.textContent = ""; + errors.textContent = ""; + output.textContent = schemascii.patched_render(source.value); +} + +async function switch_version() { + info("Installing Schemascii version " + ver_switcher.value + "... ") + await pyodide.pyimport("micropip").install(ver_map[ver_switcher.value]); + monkeypatch(); + schemascii = pyodide.runPython("import schemascii; schemascii"); + info("done\n"); +} + +function download() { + var a = document.createElement("a"); + a.setAttribute("href", URL.createObjectURL(new Blob([output.innerHTML], {"type": "application/svg+xml"}))); + a.setAttribute("download", `schemascii_playground_${new Date().toISOString()}_no_css.svg`); + a.click(); +} + +main(); + +// fetch("https://github.com/dragoncoder047/schemascii/zipball/main/").then(r => r.arrayBuffer()).then(b => pyodide.unpackArchive(b, "zip")); diff --git a/scripts/web_startup.py b/scripts/web_startup.py deleted file mode 100644 index 360902b..0000000 --- a/scripts/web_startup.py +++ /dev/null @@ -1,76 +0,0 @@ -import functools -import sys -import re -import js -import json -import warnings -from pyodide.http import open_url as get -import micropip - - -def sync_css(): - style_elem.innerHTML = css_box.value - - -def render_catch_warnings(*args, **kwargs): - import schemascii - console.textContent = "" - errors.textContent = "" - with warnings.catch_warnings(record=True) as captured_warnings: - out = schemascii.render(*args, **kwargs) - for warn in captured_warnings: - print("warning:", warn.message) - return out - - -def switch_version(): - if "schemascii" in sys.modules: - del sys.modules["schemascii"] # Invalidate cache - version = ver_switcher.value - js.eval( - f'''(async () => await pyodide.globals.get("micropip").install({versions_to_wheel_map[version]!r}))();''') - - -def download_svg(): - a = js.document.createElement("a") - a.setAttribute("href", js.URL.createObjectURL(js.Blob.new( - [output.innerHTML], {"type": "application/svg+xml"}))) - a.setAttribute( - "download", f"schemascii_playground_{js.Date.new.toISOString()}_no_css.svg") - a.click() - - -output = js.document.getElementById("output") -css_box = js.document.getElementById("css") -console = js.document.getElementById("console") -source = js.document.getElementById("schemascii") -style_elem = js.document.getElementById("custom-css") -errors = js.document.getElementById("errors") -ver_switcher = js.document.getElementById("version") -download_button = js.document.getElementById("download") - - -print("Loading all versions... ", end="") -foo = json.load( - get("https://api.github.com/repos/dragoncoder047/schemascii/contents/dist")) -foo = filter(lambda x: x["name"].endswith(".whl"), foo) -foo = list(map(lambda x: x["path"], foo)) -versions_to_wheel_map = dict( - zip(map(lambda x: re.search(r"""/schemascii-([\d.]+)-""", x).group(1), foo), foo)) -all_versions = list(versions_to_wheel_map.keys()) -latest_version = re.search( - r'''version = "([\d.]+)"''', get("pyproject.toml").read()).group(1) -print(all_versions, "latest =", latest_version) - -for ver in all_versions: - opt = js.document.createElement("option") - opt.value = opt.textContent = ver - ver_switcher.append(opt) - -ver_switcher.value = latest_version -await micropip.install(versions_to_wheel_map[latest_version]) - - -css_source = get("schemascii_example.css").read() -style_elem.textContent = css_source -css_box.value = css_source From 6b9bf5145f1a6afa6787482bc1fb48d977173801 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 16:49:03 -0400 Subject: [PATCH 16/23] typo --- scripts/web_startup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/web_startup.js b/scripts/web_startup.js index d2b1a0b..9547219 100644 --- a/scripts/web_startup.js +++ b/scripts/web_startup.js @@ -30,7 +30,7 @@ async function main() { o.textContent = o.value = v; ver_switcher.append(o); } - var latest_version = await fetch("pyproject.toml").then(r => r.text()).then(r => /version = "([\d.]+)"/.exec(r)[0]); + var latest_version = await fetch("pyproject.toml").then(r => r.text()).then(r => /version = "([\d.]+)"/.exec(r)[1]); ver_switcher.value = latest_version; info(`["${all_versions.join('", "')}"]\nlatest=${latest_version}\n`); await switch_version(); From 510aba8eb3bce4a6bff6218f199402ae24fbabb4 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 16:52:07 -0400 Subject: [PATCH 17/23] another typo --- scripts/web_startup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/web_startup.js b/scripts/web_startup.js index 9547219..729c156 100644 --- a/scripts/web_startup.js +++ b/scripts/web_startup.js @@ -87,7 +87,7 @@ function sync_css() { function render() { console.textContent = ""; errors.textContent = ""; - output.textContent = schemascii.patched_render(source.value); + output.innerHTML = schemascii.patched_render(source.value); } async function switch_version() { From dbbee0dfd2c63b6d9b95eba2448b573382af8215 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 16:54:59 -0400 Subject: [PATCH 18/23] forgot to fetch css --- scripts/web_startup.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/web_startup.js b/scripts/web_startup.js index 729c156..a905ab9 100644 --- a/scripts/web_startup.js +++ b/scripts/web_startup.js @@ -39,6 +39,7 @@ async function main() { download_button.addEventListener("click", download); ver_switcher.addEventListener("change", acatched(switch_version)); + css_box.value = await fetch("schemascii_example.css").then(r => r.text()); source.removeAttribute("disabled"); css_box.removeAttribute("disabled"); console.textContent = "Ready"; From 43d70fffa7d6b230242fcf6370b0ace9e4a9a60a Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 17:01:16 -0400 Subject: [PATCH 19/23] missing objects --- scripts/web_startup.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/web_startup.js b/scripts/web_startup.js index a905ab9..12b455e 100644 --- a/scripts/web_startup.js +++ b/scripts/web_startup.js @@ -6,6 +6,8 @@ var css_box = document.getElementById("css"); var source = document.getElementById("schemascii"); var download_button = document.getElementById("download"); var ver_switcher = document.getElementById("version"); +var style_elem = document.getElementById("custom-css"); +var output = document.getElementById("output"); var schemascii; var monkeysrc; @@ -34,6 +36,7 @@ async function main() { ver_switcher.value = latest_version; info(`["${all_versions.join('", "')}"]\nlatest=${latest_version}\n`); await switch_version(); + css_box.addEventListener("input", debounce(sync_css)); source.addEventListener("input", debounce(catched(render))); download_button.addEventListener("click", download); @@ -95,11 +98,13 @@ async function switch_version() { info("Installing Schemascii version " + ver_switcher.value + "... ") await pyodide.pyimport("micropip").install(ver_map[ver_switcher.value]); monkeypatch(); - schemascii = pyodide.runPython("import schemascii; schemascii"); + schemascii = pyodide.runPython("import schemascii\nschemascii"); info("done\n"); + output.innerHTML = ""; } function download() { + if (!output.innerHTML) return; var a = document.createElement("a"); a.setAttribute("href", URL.createObjectURL(new Blob([output.innerHTML], {"type": "application/svg+xml"}))); a.setAttribute("download", `schemascii_playground_${new Date().toISOString()}_no_css.svg`); From 52bb36d4eae0274c20bbfea5b01508c3e2d44c0d Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 17:03:59 -0400 Subject: [PATCH 20/23] guards around installing new version --- scripts/web_startup.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/web_startup.js b/scripts/web_startup.js index 12b455e..00a45e9 100644 --- a/scripts/web_startup.js +++ b/scripts/web_startup.js @@ -95,12 +95,14 @@ function render() { } async function switch_version() { + source.setAttribute("disabled", true); info("Installing Schemascii version " + ver_switcher.value + "... ") await pyodide.pyimport("micropip").install(ver_map[ver_switcher.value]); monkeypatch(); schemascii = pyodide.runPython("import schemascii\nschemascii"); info("done\n"); output.innerHTML = ""; + source.removeAttribute("disabled"); } function download() { From a76158b6dfa26384f8e2fc8bdce52b5efca728bd Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 17:04:48 -0400 Subject: [PATCH 21/23] sync css to start --- scripts/web_startup.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/web_startup.js b/scripts/web_startup.js index 00a45e9..db6ac5e 100644 --- a/scripts/web_startup.js +++ b/scripts/web_startup.js @@ -43,6 +43,7 @@ async function main() { ver_switcher.addEventListener("change", acatched(switch_version)); css_box.value = await fetch("schemascii_example.css").then(r => r.text()); + sync_css(); source.removeAttribute("disabled"); css_box.removeAttribute("disabled"); console.textContent = "Ready"; From 4889bbad2ffe686034acf2287a912955c5ef03e5 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Mon, 16 Sep 2024 20:51:55 -0400 Subject: [PATCH 22/23] Use nested CSS --- schemascii_example.css | 108 +++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 59 deletions(-) diff --git a/schemascii_example.css b/schemascii_example.css index 617c61d..379ae3e 100644 --- a/schemascii_example.css +++ b/schemascii_example.css @@ -1,69 +1,59 @@ svg.schemascii { background: black; -} - -svg.schemascii .wire polyline { - stroke: var(--sch-color, blue); - stroke-width: 2; - stroke-linecap: round; - stroke-linejoin: round; - transition-duration: 0.2s; - fill: transparent; -} - -svg.schemascii .wire circle { - fill: var(--sch-color, blue); - transition-duration: 0.2s; -} - -svg.schemascii :is(.wire, .component):hover { - --sch-color: lime; -} - -svg.schemascii .component :is(polyline, path, line, polygon, rect, circle):not(.filled) { - stroke: var(--sch-color, red); - stroke-width: 2; - stroke-linecap: round; - transition-duration: 0.2s; - fill: transparent; -} - -svg.schemascii .component :is(polyline, path, line, polygon, rect, circle).filled { - fill: var(--sch-color, red); - stroke: none; - transition-duration: 0.2s; -} - - -svg.schemascii .component .plus :is(polyline, path, line) { - stroke-width: 1; -} - -svg.schemascii .component polygon { - fill: var(--sch-color, red); -} - -svg.schemascii .component text { - fill: white; - transition-duration: 0.2s; -} - -svg.schemascii .component:hover text { - font-weight: bold; -} -svg.schemascii .component tspan:is(.cmp-value, .part-num) { - opacity: 50%; + & .wire polyline { + stroke: var(--sch-color, blue); + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + transition-duration: 0.2s; + fill: transparent; + } + & .wire circle { + fill: var(--sch-color, blue); + transition-duration: 0.2s; + } + & :is(.wire, .component):hover { + --sch-color: lime; + } + & .component :is(polyline, path, line, polygon, rect, circle):not(.filled) { + stroke: var(--sch-color, red); + stroke-width: 2; + stroke-linecap: round; + transition-duration: 0.2s; + fill: transparent; + } + & .component :is(polyline, path, line, polygon, rect, circle).filled { + fill: var(--sch-color, red); + stroke: none; + transition-duration: 0.2s; + } + & .component .plus :is(polyline, path, line) { + stroke-width: 1; + } + & .component polygon { + fill: var(--sch-color, red); + } + & .component text { + fill: white; + transition-duration: 0.2s; + } + & .component:hover text { + font-weight: bold; + } + & .component tspan:is(.cmp-value, .part-num) { + opacity: 50%; + } } @media all and (prefers-color-scheme: light) { svg.schemascii { background: white; - } - svg.schemascii .component text { - fill: black; - } - svg.schemascii :is(.wire, .component):hover { - --sch-color: lime; + & .component text { + fill: black; + } + & :is(.wire, .component):hover { + --sch-color: lime; + } } } From a4e968395668a7d8ba82633ba8bb881eb6d7e16f Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 16 May 2025 13:55:02 -0400 Subject: [PATCH 23/23] force monospaced font on textareas closes #10 --- index.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 6f750b2..7d2e0e7 100644 --- a/index.html +++ b/index.html @@ -24,6 +24,11 @@ resize: vertical; } + textarea, + pre { + font-family: "Fira Code", monospace; + } + #errors { color: red; } @@ -73,4 +78,4 @@

More Information

- \ No newline at end of file + pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy

Schemascii Source

@@ -55,7 +56,7 @@

Messages

Errors


         

More Information

-

https://github.com/dragoncoder047/schemascii/

+

https://github.com/dragoncoder047/schemascii/

- + \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index e14990c..91486a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "schemascii" -version = "0.3.1" +version = "0.3.2" description = "Render ASCII-art schematics to SVG" readme = "README.md" authors = [{ name = "dragoncoder047", email = "101021094+dragoncoder047@users.noreply.github.com" }] diff --git a/schemascii/__init__.py b/schemascii/__init__.py index ee060e4..96d7308 100644 --- a/schemascii/__init__.py +++ b/schemascii/__init__.py @@ -8,7 +8,7 @@ from .utils import XML from .errors import * -__version__ = "0.3.1" +__version__ = "0.3.2" def render(filename: str, text: str = None, **options) -> str: diff --git a/scripts/web_startup.py b/scripts/web_startup.py new file mode 100644 index 0000000..9e24293 --- /dev/null +++ b/scripts/web_startup.py @@ -0,0 +1,99 @@ +from pyodide.http import pyfetch as fetch, open_url as get +from pyodide.ffi import create_proxy as event_handler +import asyncio +import functools +import sys +import re +import js +import json +from operator import itemgetter +import warnings +import micropip + + +def debounced(fun): + timeout = None + + @functools.wraps(fun) + def inner(): + nonlocal timeout + if timeout: + js.clearTimeout(timeout) + timeout = js.setTimeout(fun, 100) + + return inner + + +def syncify(fun): + @functools.wraps(fun) + def inner(e): + return asyncio.ensure_future(fun(e)) + return inner + + +@event_handler +@debounced +def sync_css(): + style_elem.innerHTML = css_box.value + + +@event_handler +@debounced +def render_catch_warnings(*args, **kwargs): + import schemascii + console.textContent = "" + errors.textContent = "" + with warnings.catch_warnings(record=True) as captured_warnings: + out = schemascii.render(*args, **kwargs) + for warn in captured_warnings: + print("warning:", warn.message) + return out + + +@event_handler +@syncify +async def switch_version(): + if "schemascii" in sys.modules: + del sys.modules["schemascii"] # Invalidate cache + version = ver_switcher.value + await micropip.install(versions_to_wheel_map[version]) + +output = js.document.getElementById("output") +css_box = js.document.getElementById("css") +console = js.document.getElementById("console") +source = js.document.getElementById("schemascii") +style_elem = js.document.getElementById("custom-css") +errors = js.document.getElementById("errors") +ver_switcher = js.document.getElementById("version") + + +print("Loading all versions... ", end="") +versions_all = json.load( + get("https://api.github.com/repos/dragoncoder047/schemascii/contents/dist")) +versions_to_wheel_map = dict( + zip(map(itemgetter("name"), versions_all), map(itemgetter("path"), versions_all))) +all_versions = list(versions_to_wheel_map.keys()) +all_versions.append("DEV") +latest_version = re.search( + r'''version = "([\d.]+)"''', get("pyproject.toml").read()).group(1) +print(all_versions, "latest =", latest_version) + +for ver in all_versions: + opt = js.document.createElement("option") + opt.value = opt.textContent = ver + ver_switcher.append(opt) + +ver_switcher.value = latest_version +await micropip.install(versions_to_wheel_map[latest_version]) + + +css_source = get("schemascii_example.css").read() +style_elem.textContent = css_source +css_box.value = css_source + +css_box.addEventListener("input", sync_css) +source.addEventListener("input", render_catch_warnings) + +source.removeAttribute("disabled") +css_box.removeAttribute("disabled") +console.textContent = "ready\n" diff --git a/test_data/test_charge_pump.txt.svg b/test_data/test_charge_pump.txt.svg index e72f24f..128baf2 100644 --- a/test_data/test_charge_pump.txt.svg +++ b/test_data/test_charge_pump.txt.svg @@ -1 +1 @@ -NE555U176215348BAT1 5 VR1 10 kΩC2 10 µFD2 1N4001J1 -5VR2 100 kΩC1 0.01 µFC3 100 µFC4 10 pFD1 1N4001J2 GND \ No newline at end of file +NE555U176215348BAT1 5 VR1 10 kΩC2 10 µFD2 1N4001J1 -5VR2 100 kΩC1 0.01 µFC3 100 µFC4 10 pFD1 1N4001J2 GND \ No newline at end of file From 6757c2e882e22db54534430abe97f805d7b7b950 Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 18:35:20 +0000 Subject: [PATCH 11/23] fix version finding bug --- scripts/web_startup.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/web_startup.py b/scripts/web_startup.py index 9e24293..1977a97 100644 --- a/scripts/web_startup.py +++ b/scripts/web_startup.py @@ -6,7 +6,6 @@ import re import js import json -from operator import itemgetter import warnings import micropip @@ -68,12 +67,13 @@ async def switch_version(): print("Loading all versions... ", end="") -versions_all = json.load( +foo = json.load( get("https://api.github.com/repos/dragoncoder047/schemascii/contents/dist")) +foo = filter(lambda x: x["name"].endswith(".whl"), foo) +foo = map(lambda x: x["path"], foo) versions_to_wheel_map = dict( - zip(map(itemgetter("name"), versions_all), map(itemgetter("path"), versions_all))) + zip(map(lambda x: re.search(r"""/schemascii-([\d.]+)-""", x).group(1), foo), foo)) all_versions = list(versions_to_wheel_map.keys()) -all_versions.append("DEV") latest_version = re.search( r'''version = "([\d.]+)"''', get("pyproject.toml").read()).group(1) print(all_versions, "latest =", latest_version) From c625572397b7a8ac17b574389175bd3e84e04c9b Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 18:41:39 +0000 Subject: [PATCH 12/23] mixed up lazy iteration --- scripts/web_startup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/web_startup.py b/scripts/web_startup.py index 1977a97..b4b8ac0 100644 --- a/scripts/web_startup.py +++ b/scripts/web_startup.py @@ -70,7 +70,7 @@ async def switch_version(): foo = json.load( get("https://api.github.com/repos/dragoncoder047/schemascii/contents/dist")) foo = filter(lambda x: x["name"].endswith(".whl"), foo) -foo = map(lambda x: x["path"], foo) +foo = list(map(lambda x: x["path"], foo)) versions_to_wheel_map = dict( zip(map(lambda x: re.search(r"""/schemascii-([\d.]+)-""", x).group(1), foo), foo)) all_versions = list(versions_to_wheel_map.keys()) From f44028cff791a95d228164ee60523895e4f0372d Mon Sep 17 00:00:00 2001 From: dragoncoder047 <101021094+dragoncoder047@users.noreply.github.com> Date: Fri, 11 Aug 2023 18:55:18 +0000 Subject: [PATCH 13/23] add download button --- index.html | 2 +- scripts/web_startup.py | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 098f57c..eafbbbb 100644 --- a/index.html +++ b/index.html @@ -61,7 +61,7 @@

Schemascii Source

CSS