DIRECTORY Containers USING [Container], IconEditorDefs, IconRegistry USING [RegisterIcon], MBQueue USING [Queue, CreateMenuEntry], Menus USING [CreateMenu, InsertMenuEntry, Menu, MenuProc], MessageWindow USING [Append, Blink, Confirm], PrincOpsUtils USING [IsBound], Rope USING [Cat, ROPE, Size], ViewerClasses USING [Viewer], ViewerOps USING [PaintViewer, SetNewVersion], ViewerTools USING [GetContents]; IconEditorImplA: CEDAR PROGRAM IMPORTS IconEditorDefs, IconRegistry, MBQueue, Menus, MessageWindow, PrincOpsUtils, Rope, ViewerOps, ViewerTools EXPORTS IconEditorDefs = { CreateMenu: PUBLIC PROC [handle: IconEditorDefs.IconHandle] RETURNS [iconMenu: Menus.Menu] = { queue: MBQueue.Queue _ handle.queue; --an automaticallly managed queue iconMenu _ Menus.CreateMenu[lines: 3]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"BlackLabel", proc:BlackLabelProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"WhiteLabel", proc:WhiteLabelProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"DrawLine", proc:LineProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"InvertColor", proc:InvertProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"Black", proc:BlackProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"DarkGray", proc:DarkGrayProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"DeskTopGray", proc:DeskTopGrayProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"White", proc:WhiteProc, fork:TRUE, clientData:handle], 2]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"Register", proc:RegisterIconProc, fork:TRUE, clientData:handle], 1]; -- w.t. Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"UnSetLabel", proc:UnLabelIconProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"SetLabel", proc:LabelIconProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"Mirror", proc:MirrorProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"ShiftRt", proc:RightProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"ShiftLf", proc:LeftProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"ShiftDn", proc:DownProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"ShiftUp", proc:UpProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"UNDO", proc:IconEditorDefs.UndoProc, fork:TRUE, clientData:handle], 1]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"CreateFilledIcon", proc: FillIconProc, fork:TRUE, clientData:handle], 0]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"ShowLabel", proc:ShowLabelProc, fork:TRUE, clientData:handle], 0]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"CreateIcon", proc:CreateIconProc, fork:TRUE, clientData:handle], 0]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"DeleteIcon", proc:IconEditorDefs.DeleteIconProc, fork:TRUE, clientData:handle], 0]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"RotateDisplay", proc:RotateDisplayProc, fork:TRUE, clientData:handle], 0]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"Load", proc:LoadIconProc, fork:TRUE, clientData:handle], 0]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"Save", proc:SaveProc, fork:TRUE, clientData:handle, guarded: TRUE, documentation:"Confirm write to Icon file"], 0]; Menus.InsertMenuEntry[iconMenu, MBQueue.CreateMenuEntry[q: queue, name:"Reset", proc:ResetProc, fork:TRUE, clientData:handle], 0]; }; LoadIconProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; IF handle.container.newVersion THEN IF ~MessageWindow.Confirm["Confirm discard of current icon edits..."] THEN RETURN; handle.iconFileName _ ViewerTools.GetContents[handle.iconFileWindow]; IF Rope.Size[handle.iconFileName]=0 THEN { MessageWindow.Append[message: "Enter file name prior to Load.", clearFirst: TRUE]; RETURN }; [handle.numberReadIn, handle.iconFile] _ IconEditorDefs.LoadIcons[handle, handle.iconFileName ! IconEditorDefs.CouldntLoadIcons => {MessageWindow.Append[ Rope.Cat["Icon file ", handle.iconFileName," could not be loaded"], TRUE]; GOTO BadFile }]; IF handle.iconFile#NIL THEN { handle.numberOfIcons _ handle.numberReadIn; handle.startDisplay _ 0; handle.currentIC _ FIRST[IconEditorDefs.IconFlavor]; handle.container.newVersion _ FALSE; handle.drewLine _ FALSE; handle.drewRectangle _ FALSE; ViewerOps.PaintViewer[viewer: handle.container, hint: all]; }; EXITS BadFile => RETURN }; RotateDisplayProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef; increment: INTEGER _ IF mouseButton=red THEN 1 ELSE 4; IF shift THEN increment _ -increment; handle.startDisplay _ (handle.startDisplay + increment) MOD handle.numberOfIcons; IF handle.startDisplay < 0 THEN handle.startDisplay _ handle.startDisplay+handle.numberOfIcons; handle.currentIC _ LOOPHOLE[handle.startDisplay]; iconInfo _ NEW[IconEditorDefs.IconInfoRec _ [handle, screen, handle.currentIC]]; ViewerOps.SetNewVersion[handle.container]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; BlackProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IF IconEditorDefs.PointsMarked[handle, rect] THEN { IconEditorDefs.SaveBitMap[handle]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.SetBlack[handle, handle.currentIC, handle.currentRectangle]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; }; InvertProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IF IconEditorDefs.PointsMarked[handle, rect] THEN { IconEditorDefs.SaveBitMap[handle]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.Invert[handle, handle.currentIC, handle.currentRectangle]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; }; MirrorProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IF IconEditorDefs.PointsMarked[handle, rect] THEN { IconEditorDefs.SaveBitMap[handle]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.MirrorIcon[handle, handle.currentIC, handle.currentRectangle]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; }; DeskTopGrayProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IF IconEditorDefs.PointsMarked[handle, rect] THEN { IconEditorDefs.SaveBitMap[handle]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.SetDeskTopGray[handle, handle.currentIC, handle.currentRectangle]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; }; DarkGrayProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IF IconEditorDefs.PointsMarked[handle, rect] THEN { IconEditorDefs.SaveBitMap[handle]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.SetDarkGray[handle, handle.currentIC, handle.currentRectangle]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; }; WhiteProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IF IconEditorDefs.PointsMarked[handle, rect] THEN { IconEditorDefs.SaveBitMap[handle]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.SetWhite[handle, handle.currentIC, handle.currentRectangle]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; }; RightProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IconEditorDefs.SaveBitMap[handle]; IconEditorDefs.MoveRight[handle, handle.currentIC, (mouseButton = red)]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; LeftProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IconEditorDefs.SaveBitMap[handle]; IconEditorDefs.MoveLeft[handle, handle.currentIC, (mouseButton = red)]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; UpProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IconEditorDefs.SaveBitMap[handle]; IconEditorDefs.MoveUp[handle, handle.currentIC, (mouseButton = red)]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; DownProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IconEditorDefs.SaveBitMap[handle]; IconEditorDefs.MoveDown[handle, handle.currentIC, (mouseButton = red)]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; LineProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, icon, handle.currentIC]]; IF IconEditorDefs.PointsMarked[handle, line] THEN { IconEditorDefs.SaveBitMap[handle]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.DrawLine[handle, handle.currentLine, handle.currentIC]; handle.drewLine _ FALSE; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; }; CreateIconProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle = NARROW[clientData]; newLastFlavor: IconEditorDefs.IconFlavor = IconEditorDefs.GetNewFlavor[handle]; insertAt: IconEditorDefs.IconFlavor = SELECT mouseButton FROM red, yellow => newLastFlavor, blue => handle.currentIC, ENDCASE => ERROR; iaQuaNat: IconEditorDefs.Nat = LOOPHOLE[insertAt]; iconInfo: IconEditorDefs.IconInfoRef = IF insertAt = newLastFlavor THEN NEW[IconEditorDefs.IconInfoRec _ [handle, newIcon, insertAt]] ELSE NIL; handle.currentIC _ insertAt; FOR f: IconEditorDefs.IconFlavor DECREASING IN [insertAt .. newLastFlavor) DO handle.icons[LOOPHOLE[f.SUCC]] _ handle.icons[LOOPHOLE[f]]; ENDLOOP; handle.currentIconRep _ handle.icons[LOOPHOLE[insertAt]] _ NEW[IconEditorDefs.IconFileFormat]; handle.numberOfIcons _ handle.numberOfIcons + 1; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.ClearIcon[handle, handle.currentIC]; handle.startDisplay _ MAX[iaQuaNat - IconEditorDefs.maxIconsOnDisplay + 1, MIN[iaQuaNat, handle.startDisplay]]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; FillIconProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; IconEditorDefs.FillIcon[handle]; }; ShowLabelProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, rect, handle.currentIC]]; ViewerOps.SetNewVersion[handle.container]; IF ~handle.currentIconRep.label THEN { MessageWindow.Append[message: "Current icon has no label.", clearFirst: TRUE]; MessageWindow.Blink[]; RETURN } ELSE { handle.labelRect.x _ handle.currentIconRep.lx; handle.labelRect.y _ IconEditorDefs.iconH-1-(handle.currentIconRep.ly+handle.currentIconRep.lh); handle.labelRect.w _ handle.currentIconRep.lw; handle.labelRect.h _ handle.currentIconRep.lh }; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; WhiteLabelProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.WhiteLabel[handle, handle.currentIC]; }; BlackLabelProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.BlackLabel[handle, handle.currentIC]; }; LabelIconProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; iconInfo: IconEditorDefs.IconInfoRef _ NEW[IconEditorDefs.IconInfoRec _ [handle, rect, handle.currentIC]]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.SetLabel[handle, handle.currentIC, handle.currentRectangle]; ViewerOps.PaintViewer[viewer: handle.viewer, hint: client, whatChanged: iconInfo, clearClient: FALSE]; }; UnLabelIconProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; ViewerOps.SetNewVersion[handle.container]; IconEditorDefs.UnSetLabel[handle, handle.currentIC]; }; RegisterIconProc: Menus.MenuProc = TRUSTED { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; IF NOT PrincOpsUtils.IsBound[LOOPHOLE[IconRegistry.RegisterIcon]] THEN { MessageWindow.Append["IconRegistryImpl.bcd has not been run", TRUE]; MessageWindow.Blink[] } ELSE IconRegistry.RegisterIcon[iconName: ViewerTools.GetContents[handle.iconNameWindow], fileName: ViewerTools.GetContents[handle.iconFileWindow], index: LOOPHOLE[handle.currentIC, IconEditorDefs.Nat], saveInCatalogue: TRUE]; }; SaveProc: PUBLIC Menus.MenuProc = { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; handle.iconFileName _ ViewerTools.GetContents[handle.iconFileWindow]; IF Rope.Size[handle.iconFileName]=0 THEN { MessageWindow.Append[message: "Enter file name prior to Save.", clearFirst: TRUE]; RETURN }; handle.iconFile _ IconEditorDefs.SaveIcons[handle, handle.iconFileName, handle.numberOfIcons ! IconEditorDefs.CouldntSaveIcons => {MessageWindow.Append[ Rope.Cat["Icon file ", handle.iconFileName, " could not be saved"], TRUE]; GOTO BadFile }]; IF handle.iconFile#NIL THEN MessageWindow.Append[message: Rope.Cat["Icons saved in ", handle.iconFileName], clearFirst: TRUE]; handle.container.newVersion _ FALSE; ViewerOps.PaintViewer[handle.container, caption]; EXITS BadFile => RETURN }; ResetProc: PUBLIC Menus.MenuProc = TRUSTED { handle: IconEditorDefs.IconHandle _ NARROW[clientData]; IF ~handle.container.newVersion OR ~MessageWindow.Confirm["Confirm discard of new icon edits..."] THEN RETURN; [handle.numberReadIn, handle.iconFile] _ IconEditorDefs.LoadIcons[handle, handle.iconFileName ! IconEditorDefs.CouldntLoadIcons => {MessageWindow.Append[ Rope.Cat["Icon file ", handle.iconFileName," could not be reset"], TRUE]; GOTO BadFile }]; IF handle.iconFile#NIL THEN { handle.numberOfIcons _ handle.numberReadIn; handle.startDisplay _ 0; handle.currentIC _ FIRST[IconEditorDefs.IconFlavor]; handle.container.newVersion _ FALSE; handle.drewLine _ FALSE; handle.drewRectangle _ FALSE; ViewerOps.PaintViewer[viewer: handle.container, hint: all]; }; EXITS BadFile => RETURN; }; }. -- Removed redundant menu items: Close Grow --> <-- Destroy bIconEditorImplA.mesa Last Edited by: Ken Pier, May 17, 1985 5:44:11 pm PDT Mike Spreitzer July 29, 1986 9:18:59 am PDT MenuProc: TYPE = PROC [parent: REF ANY, clientData: REF ANY _ NIL, mouseButton: MouseButton _ red, shift, control: BOOL _ FALSE]; rotates the display incrementally by moving up the starting position in the icons array for DrawLine and mark1 and mark2. This allows a new icon to be created. It creates a completely "blank" icon and causes this to become the new current icon. make sure the new icon is blank before we paint the screen, make sure new icon is visible now erase the sketch Edited on April 11, 1983 4:09 pm, by Teitelman added Register button which calls IconRegistry to register an icon changes to: CreateMenu, RegisterIconProc, SaveProc, DIRECTORY, CreateMenu, RegisterIconProc, SaveProc, IconEditorStorageOverflowInPass3, DIRECTORY, IconEditorStorageOverflowInPass3, handle (local of RegisterIconProc), RegisterIconProc Edited on April 12, 1983 5:03 pm, by Teitelman changes to: RegisterIconProc, handle (local of RegisterIconProc), DIRECTORY, IconEditorStorageOverflowInPass3 Edited on April 22, 1983 1:41 pm, by Wyatt Edited on April 23, 1983 1:35 pm, by Teitelman Register command was getting name of file from fetchIconFileWindow rather than fetchFileWIndow changes to: RegisterIconProc Pier, May 9, 1985 converted to Cedar 6.0 Κ Y˜Icodešœ™šœ5™5K™+—K˜šΟk ˜ Kšœ œ ˜K˜Kšœ œ˜"Kšœœ˜'Kšœœ/˜:Kšœœ˜-Kšœœ ˜Kšœœœ˜Kšœœ ˜Kšœ œ˜-Kšœ œ˜ —K˜šΟnœœ˜Kšœj˜qKšœ˜K˜šž œœœ%œ˜^Kšœ%Οc!˜FK˜&Kšœoœ˜ŒKšœoœ˜ŒKšœgœ˜„Kšœlœ˜‰Kšœeœ˜‚Kšœkœ˜ˆKšœqœ˜ŽKšœeœ˜‚KšœoœŸ˜•Kšœpœ˜Kšœlœ˜‰Kšœgœ˜„Kšœgœ˜„Kšœfœ˜ƒKšœfœ˜ƒKšœdœ˜Kšœrœ˜Kšœtœ˜‘Kšœmœ˜ŠKšœoœ˜ŒKšœ~œ˜›Kšœuœ˜’Kšœgœ˜„Kšœcœœ2˜»Kšœeœ˜‚K˜—K˜šž œœ˜'Kšœ$œ ˜7Kšœ˜#KšœD˜JKšœ˜K˜Ešœ"œ˜*KšœLœ˜RKš˜K˜—˜I˜OKšœDœ˜J—Kšœ˜ K˜—šœœœ˜Kšœ+˜+K˜Kšœœ˜4Kšœœ˜$Kšœœ˜Kšœœ˜K˜;K˜—Kšœ ˜K˜—K˜šžœœ˜,Kšœ œœ œœœœœ3œœ™‚KšœW™WK˜Kšœ$œ ˜7K˜%Kš œ œœœœ˜6Jšœœ˜%Jšœ8œ˜QJšœœ@˜_Kšœœ˜1Kšœ œB˜PK˜*Kšœ_œ˜fK˜—K˜šž œœ˜$Kšœ$œ ˜7Kšœ'œ@˜jšœ+œ˜3K˜"K˜*K˜K˜QKšœ œ˜—K˜—K˜—K˜šž œœ˜%Kšœ$œ ˜7Kšœ'œ@˜jšœ+œ˜3K˜"K˜*K˜I˜QKšœ œ˜—K˜—K˜—K˜šž œœ˜%Kšœ$œ ˜7Kšœ'œ@˜jšœ+œ˜3K˜"K˜*K˜M˜QKšœ œ˜—K˜—K˜—K˜šžœœ˜*Kšœ$œ ˜7Kšœ'œ@˜jšœ+œ˜3K˜"K˜*K˜Q˜QKšœ œ˜—K˜—K˜—K˜šž œœ˜'Kšœ$œ ˜7Kšœ'œ@˜jšœ+œ˜3K˜"K˜*K˜N˜QKšœ œ˜—K˜—K˜—K˜šž œœ˜$Kšœ$œ ˜7Kšœ'œ@˜jšœ+œ˜3K˜"K˜*K˜K˜QKšœ œ˜—K˜—K˜—K˜šž œœ˜$Kšœ$œ ˜7Kšœ'œ@˜jK˜"K˜H˜QKšœ œ˜—K˜—K˜šžœœ˜#Kšœ$œ ˜7Kšœ'œ@˜jK˜"K˜G˜QKšœ œ˜—K˜—K˜šžœœ˜!Kšœ$œ ˜7Kšœ'œ@˜jK˜"K˜E˜QKšœ œ˜—K˜—K˜šžœœ˜#Kšœ$œ ˜7Kšœ'œ@˜jK˜"K˜G˜QKšœ œ˜—K˜—K˜šžœœ˜#Kšœ!™!Kšœ$œ ˜7Kšœ'œ@˜jšœ+œ˜3K˜"K˜*K˜FKšœœ˜˜QKšœ œ˜—K˜—K˜—K˜šžœœ˜)Kšœ{™{Kšœ$œ ˜7KšœO˜OKš œ&œ œ9œœ˜‡Kšœœ ˜2Kš œ'œœœ;œœ˜Kšœ˜šœ œœ˜MKšœ œœœ˜;Kšœ˜—Kšœ%œœ ˜^K˜0K˜*Kšœ™K˜3Kšœ9™9Kšœœ2œ!˜o˜QKšœ œ˜—K˜—K˜šž œœ˜'Kšœ$œ ˜7K˜ K˜—K˜šž œœ˜(Kšœ$œ ˜7Kšœ'œ@˜jK˜*šœœ˜&KšœHœ˜NK˜Kšœ˜K˜—šœ˜K˜.˜K˜K—K˜.K˜.K˜—˜QKšœ œ˜—K˜—K˜šžœœ˜)Kšœ$œ ˜7K˜*K˜4K˜—K˜šžœœ˜)Kšœ$œ ˜7K˜*K˜4K˜—K˜šž œœ˜(Kšœ$œ ˜7Kšœ'œ@˜jK˜*K˜KKšœ™Kšœ_œ˜fK˜—K˜šžœœ˜*Kšœ$œ ˜7K˜*K˜4K˜—K˜šžœœ˜,Kšœ$œ ˜7šœœœœ˜HKšœ>œ˜DK˜K˜—Kšœ–œ9œ˜αK˜—K˜šžœœ˜#Kšœ$œ ˜7K˜Ešœ"œ˜*KšœLœ˜RKš˜K˜—˜\˜;KšœDœ˜J—Kšœ˜ K˜—Kšœœœ]œ˜~Kšœœ˜$K˜1Kšœ ˜K˜—K˜šž œœœ˜,Kšœ$œ ˜7KšœœAœœ˜o˜I˜OKšœCœ˜I—Kšœ˜ K˜—šœœœ˜Kšœ+˜+K˜Kšœœ˜4Kšœœ˜$Kšœœ˜Kšœœ˜K˜;K˜—šœ˜Kšœ œ˜—K˜—K˜K˜—™Kšœ.™.KšœB™BKšœκ™κKšœ.™.Kšœm™mKšœ*™*KšŸ.œŸ ˜;K™Kšœ.™.Kšœ^™^Kšœ™Kšœ)™)——…—@lQ'