)EjdddlTddlmZddlmZddlmZmZmZddl m Z ddl m Z ddl mZmZmZdd lmZdd lmZdd lZdd lZdd lZdd lZejd ZGd deZGddZGddeZGddeZGddeZ GddeZ!d S))*)TTFont) LerpGlyphSet) RecordingPenDecomposingRecordingPenRecordingPointPen)ControlBoundsPen)CairoPen)SegmentToPointPenPointToSegmentPenReverseContourPointPen)cycle)BytesIONzfontTools.varLib.interpolatableceZdZdZdZdS)OverridingDictc||_dSN parent_dict)selfrs UC:\PYTHON\MyICR_Suite\python\Lib\site-packages\fontTools/varLib/interpolatablePlot.py__init__zOverridingDict.__init__s&c|j|Srr)rkeys r __missing__zOverridingDict.__missing__s$$rN)__name__ __module__ __qualname__rrrrrrs2'''%%%%%rrc eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d ZdZd ZdZdZdZdZd ZdZdZdZdZdZdZdZdZdZdZdZ d Z!dZ"dZ#dZ$dZ%dZ&dZ'dZ(d Z)d!Z*d"Z+dEd$Z,d%Z-d&Z.d'Z/d(d#d#d)d*Z0d(d#d#d)d+Z1d,Z2d-Z3d.Z4d/Z5d(d(d0d1Z6d(d(d0d2Z7d3d3d4d3d5d#d#d#d6d7Z8d3d3d#d8d9Z9d3d3d4d:d;d<Z:d3d3d4d:dd=d>Z;d3d3d4d?d@ZdFdDZ?d#S)GInterpolatablePlotg @ig@r)333333?r&r&)皙?r'r')?r(r(?)皙?r*r*)皙?r+r+)rr*rffffff?)rr)rr,)rr(rr,)rrrr,)rrrr, )rrrr,))rrr)rrr)rrr)rrr)rrr)rrr)rrr皙?z#Your font's good! Have a cupcake...)rr)r)r&rr&a ,@. ,@.@@,. ,@@,.@@@. @.@@@,. ,@@. @@@. @@. @@,. ,@@@.@,.@. @. @@@@,.@.@@,. ,@@.@. @@.@@. @,. .@' @' @@, ,@@. @. .@@.@@@. @@' @, ,@. @@. @, @. @,@@,. , .@@, @,. .@,@@,. .@@,. , .@@, @, @, @. .@. @ @@,. , @ @,.@@. @,. @@,. @. @,. @' @@||@,. @'@,. @@,. @@ @,. @'@@, @' \\@@@@' @,. @'@@@@' @@,. @@@' //@@@' |||||||| @@,. @@' ||||||| |@@@|@|| || \\\\\\\ ||@@@|| ||||||| ||||||| // ||||||| |||||| |||||| |||||| || \\\\\\ |||||| |||||| |||||| // |||||| ||||| ||||| ||||| || \\\\\ ||||| ||||| ||||| // ||||| |||| ||||| |||| || \\\\ |||| |||| |||| // |||||||||||||||||||||||| )rr&r&z\_(")_/z o /|\ / \ z o /O\ / \ z \o/ Nc ~||_||_|p d|D|_i|_|D]8\}}t ||st d|zt|||9|jdz |j dzz |_ |j dz |j dzz |j dzz |j z |_dS)Nc,g|]}t|Sr!)repr).0gs r z/InterpolatablePlot.__init__..ps:::1tAww:::rzUnknown keyword argument: %sr-)out glyphsetsnamestocitemshasattr TypeErrorsetattrwidthpad panel_widthheight font_sizetitle_font_size panel_height)rr;r<r=kwargskvs rrzInterpolatablePlot.__init__ms"::: ::: LLNN  DAq4## D > BCCC D!Q    :>DHqL8 K!Odhl *T^a-? ?$BV V rc|Srr!rs r __enter__zInterpolatablePlot.__enter__}s rcdSrr!rtypevalue tracebacks r__exit__zInterpolatablePlot.__exit__s rc&|xjdz c_dS)Nr) page_numberrNs r show_pagezInterpolatablePlot.show_pages ArTshow_tolerance tolerance kinkinessc |j}|jd|jzz }|x}}|d||d||j||jz }ddl} |D]} t j| } ||j|jzz }|| ||d|||j|jzz } t| d5} | |  } dddn #1swxYwY|d| z||z|| ||jz }n#t$rYnwxYw| d rtt| }d |vr|d nd}|rSd D]P\}}||}|||d |||z|| ||j|jzz }Q| drZddlm}|| } dD]F\}}||d t'| |||z|| ||j|jzz }G|||||dS)Nr:zProblem report for:TxyboldrCrGr)r_r`rarCrbzsha1: %sr_r`rCz.ttfname)) Family name)r%r)Version)z: )z.glyphsz.glyphspackage)GSFont))re familyName) VersionMajor versionMajor) VersionMinor _versionMinorrY)rDrC draw_labelrHhashlibospathbasenamerGopensha1read hexdigestIsADirectoryErrorendswithrgetFirstDebugName glyphsLibrigetattr draw_legendrX)rfilesrZr[r\rDrCr_r`rpfile base_filefhttFontrdwhatnameIDsnrifields radd_title_pagez!InterpolatablePlot.add_title_pagesMh Q\) A  !*     T !!, 3, 3D((..I $(* *A OOIad%O H H H $(* *A $%%; QVVXX..88::A;;;;;;;;;;;;;;; Q!c'QeLLLT^#$    }}V$$ 3)/6)9)9vf~~t 7* 7 7 g!227;;9$(,aa0AGq(T^dh66<== 3,,,,,,F4LL$ 3 3KD% OO$(DD'!U*;*;*;<c'# $ $(22AA )Y)     s6/D:?:D9 D:D D: D ,D:: EEc tj|j}|j}|j|jz |jdzz }|jd|jzz }||jdzz}||jdzz} |r+|d| ||||j|jzz}|d| |||||jdzz |d|jz|j|j |j | |j r=|j |j | |j||j|j|||j|jzz}|d| |||||jdzz |d|jz|j|j r#|j |j | |j r=|j |j | |j||jg|jd |jR|||j|jzz}|d | |||||||jd zz|j|j|j ||j|jzz}|d | |||||||jd zz|j|j||j|jzz}|d| |||||||jd zz|j|j||j|jzz}|d| ||||||jdzz ||jd zz|j ||j|jzz}|d| |||||||jd zz|j|j!||j|jzz}|d| ||||||jdzz ||jd zz|j!||j|jzz}|d|||d||j|jzz}|.|d|z| ||||j|jzz}|.|d|z| ||||j|jzz}|d|||d||j|jzz}dS)Nr9r.z,Tolerance: badness; closer to zero the worserczUnderweight contoursr,g?z/Colored contours: contours with the wrong orderrz Kink artifactr))r_r`diameter stroke_widthcolorz!Point causing kink in the contour)r_r`rrz!Suggested new contour start pointz4Contour start point in contours with wrong directionr&r_r`rz5Contour start point when the first two points overlapz!Contour start point and directionzLegend:Tr_r`rCraz!Kink-reporting aggressiveness: %gzError tolerance: %gz Parameters:)"cairoContextsurfacerDrFrGrCro rectangleset_source_rgb fill_color fill_preserve stroke_colorset_line_widthrstroke_preserveset_source_rgbaweight_issue_contour_colorfillcontour_colors contour_alpha draw_circlekink_circle_sizekink_circle_stroke_widthkink_circle_colordraw_dotkink_point_sizekink_point_colorcorrected_start_point_sizecorrected_start_point_color draw_arrowstart_arrow_lengthwrong_start_point_colorstart_point_color) rrZr[r\crr_r`rCxxxxxs rr}zInterpolatablePlot.draw_legendsE ]4< ( ( H K$( "T^a%7 7 Q\) A $(Q,  + OO>#RW     DN* *A .#%HHH R$(S.(!S48^T^LLL4?++    ! B t0 1 1   d/ 0 0 0    D;<<   TX &&  =QV     R$(S.(!S48^T^LLL ?  B t / /         ! B t0 1 1   d/ 0 0 0    GD/2GD4FGGGG   TX && 3!5AAA  $.3&&*6(     TX && ;sauUUU $.3&&)'     TX && ;sauUUU $.3&&42     TX &&  B     4*S00$.3&&.    TX &&  C    $.3&&4(     TX && ;sauUUU  4*S00$.3&&(    TX &&  Q!5tDDD TX &&  OO3i?     DN* *A  OO% 1     DN* *A  au4HHH TX &&rc t|j}|jd|jzz }|jd|jzz }|x}}|d||d||j||jz }t t }t|D]+\}} | D]#} || d |$,tj |vr |tj =t|dD]} ||j z }|d | t|| fz|||d ||j z }t|| D]]}||j z|kr||j |z}|||d|zz||d|zz ||j z }^|dS) Nr:r9zSummary of problemsTr^rRc&tj|Sr)InterpolatableProblemseverityr_s rz0InterpolatablePlot.add_summary..ms.C.LQ.Orrz%s: %drrc)rDrCrFrorH defaultdictsetsortedr?addrNOTHINGrGlenrX) rproblemsrDrCrFr_r`glyphs_per_problem glyphnameglyph_problemsproblem problem_types r add_summaryzInterpolatablePlot.add_summaryTs%h Q\)q48|+ A  !*     T !!(--)/0@0@)A)A C C %I~) C C"76?377 BBBB C ! (,> > >"#8#@A" $O$O    $ $L  A OOL#.@.N*O*OPP      A#$6|$DEE $ $ t~%..NN$$$,A QS[AUQQTW_UUUT^#  $ rc &|j}|jd|jzz }|jd|jzz }|x}}||||d||j||j|jzz }d}|D]\} \} } | |kr| }||jz|kr||j|z}|| |d|zz||d|zz |t| ||d|zd||jz }|dS) Nr9Tr^rhrcr.r)r_r`rCalign)rDrCrFrorHrGrXstr) rtitler?rDrCrFr_r`last_glyphnamepage_norrs r _add_listingzInterpolatablePlot._add_listingsJh Q\)q48|+ A  Q!$et?S     T !DH ,,.3 *G*iN**&N4>!F**   NS( OOIQWSO Q Q Q OOCLLA!c'O K K K  AA rcz|dt|jdS)NzTable of contentsrrr>r?rNs radd_table_of_contentsz(InterpolatablePlot.add_table_of_contentss3 -vdhnn6F6F/G/GHHHHHrc|dt|jddS)NIndexc|ddS)Nrrr!rs rrz.InterpolatablePlot.add_index..s!A$q'rrrrNs r add_indexzInterpolatablePlot.add_indexs; '6$(..*:*:@Q@Q#R#R#RSSSSSrrZshow_page_numberc|D]\}}d}g}|D]}d|vr|dn|d|df} | |kr||:|r/||||||g}| }|||r-||||||dS)N master_idx master_1_idx master_2_idxr)r?append add_problemrX) rrrZrglyphr last_masterscurrent_glyph_problemspmasterss r add_problemszInterpolatablePlot.add_problemss@%-^^%5%5 ! ! !E>L%' "# 1 1$q((lOON+Q~->? l***11!444)0$$.'5)9 % NN$$$-/*& &--a0000% !  *#1%5 !    ? ! !rc <78tttfvrgf|j|j<dd8t dD}t 8fd|Ds,dtdD8t d8ddvrd nd }fd |D}8tj krCtfd t|jD}|d||j} |j} |d z| | |jdd|jt+dD} | dkr0|r.|d| z| | |jd|jzz dd| |j|jzz } |d8z| | |jd|jzz |jd| |j|jdzzz } g} t|D]\} }|j|}|j|}||| | |j|jd| |j|jzz } |/| ||| | | n||j| | | |j|jz|jzz } tAd|Dr|j|jz|jz} |j} | |j|jdzzz } | |j|jzz } |j|d}|j|d}|d| | |j|jd| |j|jzz } tC||}||ddigdDzd| | t+| | |j|jz|jzz } tAd|DrN|d | | |j|jd| |j|jzz } tE|}tE|}tGtH|!}tGtH|!7|%||%7D]9}|dtj&kr!7fd"dd#D}|7_':D]}|dtj(kr|j'|d$}7j'|d$}tS}tU|d%}|+|tS}tU|d%}|+||d#}|d&rNtS}tY|} |+| |}t[|j'dz |z }|j'dd}!|j'd'd}"|j'dd'}#|#|d|#d|z}#|!|#z|"z|_'tI}$t]|$d}|+|tI}%t]|%d}|+||$j'|_'|%j'|_'||j'|d$<|7j'|d$<D]U}|dtj/kr;|j'|d$}7j'|d$}tS}tU|d%}|+|tS}tU|d%}|+||d(}&|&dz}'|j'|'dd}(|j'|'dd})|&dz t[|j'dz zdz}*|j'|*dd}+|j'|*dd},|&dzt[|j'dz zdz}-|j'|-dd}.|j'|-dd}/ta|(}(ta|)})ta|+}+ta|,},ta|.}.ta|/}/tc|(|+z tc|.|+z z }0tc|)|,z tc|/|,z z }1|0|1zdz }2|+|2|.|+z zz}(|,|2|/|,z zz})|j'|'d|(j2|(j3ff|j'|'dddz|j'|'df|j'|'<|j'|'d|)j2|)j3ff|j'|'dddz|j'|'df|j'|'<tI}$t]|$d}|+|tI}%t]|%d}|+||$j'|_'|%j'|_'WtI}3tI}4|j'D]!}5|3j'4|5j'"7j'D]!}5|4j'4|5j'"|3j+|3_%|4j+|4_%|3|<|4|< tC||}||dd)id| | t+| n-#tj$r ||j| | YnwxYw| |j|jzz } n`|j}6tj6|vr|j7}6n+tj8|vr|j9}6ntj:|vr|j;}6||6| | |rN|ty|jd|j=|jz |jz |j|jd*dSdS)+NrrRc3&K|] }|dV dSrRNr!r6rs r z1InterpolatablePlot.add_problem..&DDGFODDDDDDrc3$K|] }|kV dSrr!r6ptrs rrz1InterpolatablePlot.add_problem..(>>"2%>>>>>>rz, ch|] }|d SrRr!rs r z1InterpolatablePlot.add_problem..s,U,U,UWV_,U,U,UrzDrawing %s: %sr)r)rrc,g|]}d|S)rr!)r6rKrs rr8z2InterpolatablePlot.add_problem..s!>>>Q(1+a.>>>rc32K|]\}}| |VdSrr!)r6imrs rrz1InterpolatablePlot.add_problem..s9  a1Y<;S;S;S;S;S  rz Glyph name: T)r_r`rrrarGc3BK|]}|ddVdS)r[rN)getr6rs rrz1InterpolatablePlot.add_problem..s0@@!k1--@@@@@@rrztolerance: %.2fr9)r_r`rCrraz Problems: )r_r`rCrrar))r_r`rrCr)r_r`c3K|]J}|tjtjtjtjtjtjfvVKdSr)rrWRONG_START_POINT CONTOUR_ORDERKINK UNDERWEIGHT OVERWEIGHTr6rs rrz1InterpolatablePlot.add_problem..sf    %-%7%3%*%1%0         rzmidway interpolationmidwaychg|]/}|dtjtjtjfv-|0Sr)rrrrrs rr8z2InterpolatablePlot.add_problem..<sP   y-2-9-8rr_r`scalec3`K|])}|tjtjtjfvV*dSr)rrrrrs rrz1InterpolatablePlot.add_problem..NsT   %7%3%*       rz proposed fixglyphsetc*g|]}j|Sr!)rS)r6rperContourPen2s rr8z2InterpolatablePlot.add_problem..ps.&&&45,Q/&&&rvalue_2contourFreversedrSfixed)r_r`rCrr)>rRlisttupler>rWralljoinrloginforMISSINGnext enumerater<insertrDro head_colorrHminrCrGr= label_colorrEr draw_glyph draw_emoticonshrugrIanyrrPerContourOrComponentPenrdrawrrSrr r replayrrr rcomplexabsrealimagextend ValueErrorr underweightr overweightryayrrF)9rrrrZr problem_types master_keysmaster_indices sample_glyphr_r`r[scaleswhichrrrd glyphset1 glyphset2midway_glyphset overriding1 overriding2perContourPen1rfixed_contours wrongContour1 wrongContour2points1 converterpoints2proposed_start new_points2 reversedPen beginPathendPathptssegment1segment2rjpt0pt1j_prevpt0_prevpt1_prevj_nextpt0_nextpt1_nextr0r1r_midfixed1fixed2remoticonrrs9 `` @@rrzInterpolatablePlot.add_problems  >>$ . . zH&/%:!"{6* DD8DDDDD >>>> >>>>> X99V,U,UH,U,U,U%V%VWWL !9l;;;x{** O1  ?>>>+>>> 08 8 8    '77   L  ! !!\ 2 2 2 H H  Y &/*    @@x@@@@@ q==^= OO!I-j1tx</     T !DH ,,  < '*q48|+/     T^dhl **!*>!:!: ? ? E:~j1H:j)D OO&&     $(* *A ". OOHi5AQROSS""4:a"888 "T^3dh> >AA    $    5 ?4++dh6AA %1 4 4A $(* *A~a'89I~a'89I OO&o&     $(* *A*9i@@O OO(#$  %    &kk#    ( "T^3dh> >A   $     { 3 OOo&     $(* *A(33K(33K5{N6{N i % %n 5 5 5 i % %n 5 5 5# : :6?&;&III&&&&9A!Y9O&&&N,:N(#+ M+ M6?&;&MMM$2$89K$LM$2$89K$LM011G 1'5 A AI!((333/11G 1'5 A AI!((333%,Y%7Nz*Q&7&9&9 &<[&I&I {333"-),W]););a)?.)P!( bqb 1I%mBCC0G!-"-Cnoo._n_1EEC$-Og$=GM ,~~H 1(D A AINN9---+~~H 1(D A AINN9---+3.M'*2.M'?LN();?!CF&}V4Q7:H&}V4Q7:H!eGM(:(:Q(>?!CF&}V4Q7:H&}V4Q7:H!3-C!3-C&1H&1H&1H&1HS8^,,s8h3F/G/GGBS8^,,s8h3F/G/GGB"WME"Uh.A%BBC"Uh.A%BBC a(+8SX.07=3CA3Fqrr3JJ a(+(GM!$  a(+8SX.07=3CA3Fqrr3JJ a(+(GM!$ ,~~H 1(D A AINN9---+~~H 1(D A AINN9---+3.M'*2.M'"^^F!^^F)/ 3 3 ##GM2222)/ 3 3 ##GM2222 -FK -FK%+K "%+K " 9".{K"H"H#W%f++  9 9 9""4:a"88888 9 "TX- -AAzH$0MAA+&1]BB?&.-??8   x1  2 2 2   OOD$%%+.9jo        s0;l,,'mmr)rrrF)r_r`rrrarCrFrGc||j}||j}| |j} tj|j} | dtj|r tjn tj | | | } | | z| dz } | | | } | j || |} | j|krK| || jz z} | | | } | |} ||| jz |zz} || dz}| | || |dS)Nz@cairo:r9r)rCrFrGrrrselect_font_faceFONT_SLANT_NORMALFONT_WEIGHT_BOLDFONT_WEIGHT_NORMAL set_font_size font_extentsr text_extentsmove_to show_text)rlabelr_r`rrrarCrFrGrrSextentslabel_xlabel_ys rrozInterpolatablePlot.draw_labels =JE >[F  I ]4< ( (    #&* HE " "0H   ###((  )LO;  ###(( 5!!//%(( =5 . .I   Y ' ' '??,,Looe,,Guw},55l1o% 7G$$$ Urrc "#t|ttfvr|g}td|D}|dd"t d|D#t "fd#Dsd"||} t } | | t|} | | t|} | | | j } | d} | d| dz }| d | d z }|r%| |j |z }nt||j |z }|r%| |j|z }nt||j|z }|d }tj|j}|||||j ||zz dz |j||zz dz ||| || d | d  |jrd|j|j|| d| d ||||j|z ||js|jrt9||}| ||jr3"t:jkr#|j|j||jr@|j|j||j |z |!|"t:j##vst:j$#vrtKt | }| ||D]{}|dt:j#t:j$fvrY|j&|d }| t9|||j'|j(|)|t#fd t:j*t:j+t:j,hDrO|-tj.| j&D]?\}}|s|d\}}|/|||0||@|j'|j1||j2|z || j&D]D\}}|s|ddD]1\}}|/|||0||2E|j'|j3||j4|z || j&D]\}}|s|dvr|j/|d|dkrC|D]\}}|0|||5|j/|df|dkri|j0|d|5|j/|d |j0|d|5|j/|dՌ|j'|j6||j7|z |d}|D]}|dt:j8kr|d}ts|j:}tKt | }| |tw|j&D]l\}}|||krty|}| t9|||j'g||j=R|)m|D]O}|dt:j*t:j>fvr|?d }||d krd|vrtKt | }| |t}t|d}|j&||n|| ||j&|dd}|B|j||d |z d |z |C||jD|jE|F|dks|?ds|jG}n|jH}d}d}|B| j&D]Z\}}|dkr |d}||dkr|} n|d} |||kr!|Bt|}t| } t| |z }!||jK|jL|!rv|MtjO| jL|jLz | jK|jKz |d |z d |z |P||n9|d |z d |z |C||jD||F|n d}|d z }\|F|dt:jQkr<|?d }tKt | }| |t}t|d}|j&||n|| ||j&|dd}|B|j||d |z d |z |r)|R||jS|jT|jUn"|C||jV|jW|FQ|S)Nc3.K|]}|ddkVdS)rRrNr!rs rrz0InterpolatablePlot.draw_glyph..Hs+IIWWV_0IIIIIIrrrRc3&K|] }|dV dSrr!rs rrz0InterpolatablePlot.draw_glyph..Jrrc3$K|] }|kV dSrr!rs rrz0InterpolatablePlot.draw_glyph..Krrmixed)rrrrr9r:rrrc3 K|]}|vV dSrr!)r6tr$s rrz0InterpolatablePlot.draw_glyph..s<          rr)moveTolineToqCurveTocurveTorF)rrrrb closePath)rrS)rrr)XrRrrrrr rrrr rboundsrErrIrrr translater border_colorrrr border_widthstrokerrr r OPEN_PATHrrrnew_pathrrrrSrrrr NODE_COUNTNODE_INCOMPATIBILITY set_line_capLINE_CAP_ROUNDrUline_tooncurve_node_coloroncurve_node_diameteroffcurve_node_coloroffcurve_node_diameter new_sub_path handle_color handle_widthrrrrrrrrSimpleRecordingPointPenr saverrrrestorerrrrrrrotatemathatan2rrrrrrrr)$rrrrr)r_r`rrr recordingdecomposedRecording boundsPenrg glyph_width glyph_heightrpen perContourPenrrsegmentargsmatchingcolorsrridxpointsr4 targetPointfirst_pt second_ptlengthrr$s$ @@rrzInterpolatablePlot.draw_glyphDs >>$ . . zHIIIIIII{6* DD8DDDDD >>>> >>>>> #"L# NN  95h?? &'''$X.. ""9---! >!FQi&)+ ay6!9,  C}(;6E4#3k#ABB  E})L8E4#4|#CDD =E ]4< ( ( Q   e 3 3q 8  !5 5 :     fQiZ&),,,    B t0 1 1 LLF1I{L I I I   d/%7 8 8 8 IIKKK ? d/ 8R((C  & &s + + + #<3H3R#R#R!!4?33  """  %!!4#455!!$"3e";<<<""$$$ KKMMM " - > >$/=@@4\HUUUM   ] + + +#  6?)5)4',1')2DEGNN8Hb#9#9:::&B&(GHHGGIII     &-%0%:     7  OOE0 1 1 1"5!: ! ! Bx1 1a    1a    B  7 8 8   d85@ A A A IIKKK"5!: % %  "I%%DAqJJq!$$$JJq!$$$$% B  8 9 9   d9EA B B B IIKKK"5!:    444BJQ((( ** $))1 1a((((OO%%%BJR))) ))BJQ((OO%%%BJQ((BJQ((OO%%%BJR))) B  1 2 2   d/%7 8 8 8 IIKKK  Gv"7"EEE"9-t233 8 8!!!   ///"+M,?"@"@JAw{a''  LLENN8Hb#9#9:::&B&BBt/ABBBBGGIIIIo o Gv%-%7#kk),,?uzzi76J6J$<$x%%%M(..}===466F 1&% @ @I!''/Xc]fY'''"(,wy/A"B1"EKGGIII BL+..HHQYE 222MM!%!@">" JJLLLA::W[[%<%<: 2EE 8E %8%>))MGT(**#'7 ' +--$, $(G {a3hh #*H#5$+Y$7 !$Y%9!:!: X]HMBBB!II $ $-NX]$B$-NX]$B!"!" HHQYE ::: OOBeO<<<<HHQYE ::: MM ")-)H&+*  ?!E#HFAA v"7"<<<kk),, 8 8!!! $**=999022-fe<< #8+;CC#OVV%l77+;[F   ]4< ( (5!! (((   79Q     (( %a"1o  * *Dood++GZ):;;J > )KK  F QEJ&(<== Z%' '1 ,v e8K/Kq.P     Q $$$ , ,D JJq!    LL    LLN + + + + , ,rc P||j|j|j|j|jd|jzz dd|j||j|j|j|jz|jd|jzz |j d|jzz |jz |j dS)Nr9r)T)r_r`rrCrrarG)r_r`rCrFr) rono_issues_labelrDno_issues_label_colorrCrHrcupcakerGrF cupcake_colorrNs r draw_cupcakezInterpolatablePlot.draw_cupcakes   hh,*q48|+*    Lhh'*q48|+;TX->$      rcZ|||||j|j|jdS)Nr)remoticon_colorrErI)rrLr_r`s rrz InterpolatablePlot.draw_emoticonsB  %"$      rr)rr)@rrr rCrFrDrHrGrWrrrirjrrrrsrtrurvrxryrrrrrrrrrrrrrrrrrrrr!r"r#rrOrUrXrr}rrrrrrrorrrrrrrr!rrr#r#"s* E F COIK J!K"LL J"LL)*#LL"2!",&O% &WNM!/;O'!MG2#N EK J C       (,ttDDDDDL-1DDF'F'F'F'F'P,,,\2IIITTT8rs7$$$$""""""333333 655555,,,,,,  g9::%%%%%T%%%c c c c c c c c L%!!!!!#5!!!3 4LLLLL*LLLLLr