DIRECTORY G2dOutline, Imager, ImagerBackdoor, ImagerColor, ImagerDevice, ImagerFont, ImagerPath, ImagerPrivate, ImagerRaster, ImagerTransformation, Rope, SF, TextNode, TiogaAccess, TiogaImager, Vector2; G2dOutlineImpl: CEDAR PROGRAM IMPORTS Imager, ImagerDevice, ImagerBackdoor, ImagerPath, ImagerRaster, TiogaAccess, TiogaImager EXPORTS G2dOutline ~ BEGIN TransformProc: TYPE ~ G2dOutline.TransformProc; Context: TYPE ~ Imager.Context; Color: TYPE ~ ImagerColor.Color; Device: TYPE ~ ImagerDevice.Device; Font: TYPE ~ ImagerFont.Font; PathProc: TYPE ~ ImagerPath.PathProc; Outline: TYPE ~ ImagerPath.Outline; Transformation: TYPE ~ ImagerTransformation.Transformation; ROPE: TYPE ~ Rope.ROPE; Reader: TYPE ~ TiogaAccess.Reader; FormattedNodes: TYPE ~ TiogaImager.FormattedNodes; VEC: TYPE ~ Vector2.VEC; TransformSelected: PUBLIC PROC [ reader: Reader, action: TransformProc, context: Context, epsilon: REAL ¬ 0.05, clientData: REF ANY ¬ NIL] ~ { IF reader # NIL THEN { loc: TextNode.Location ¬ [NARROW[TiogaAccess.GetLocation[reader].node], 0]; IF loc.node # NIL THEN { nodes: FormattedNodes ¬ TiogaImager.FormatNodes[loc, [1000, 1000]]; IF nodes.box # NIL THEN { transformContext: Context ¬ MakeTransformContext[action, context, clientData]; TiogaImager.Render[nodes.box, transformContext, [0, 0]]; }; }; }; }; TransformRope: PUBLIC PROC [ text: ROPE, action: TransformProc, context: Context, x, y: REAL ¬ 0.0, font: Font ¬ NIL, color: Color ¬ NIL, epsilon: REAL ¬ 0.05, clientData: REF ANY ¬ NIL] ~ { transformContext: Context ¬ MakeTransformContext[action, context, clientData]; Imager.SetXY[transformContext, [x, y]]; IF font # NIL THEN Imager.SetFont[transformContext, font]; IF color # NIL THEN Imager.SetColor[transformContext, color]; Imager.ShowRope[transformContext, text]; }; TransformData: TYPE ~ RECORD [ action: TransformProc, clientContext: Context, clientData: REF ANY ]; MakeTransformContext: PUBLIC PROC [ action: TransformProc, clientContext: Context, clientData: REF ANY] RETURNS [Context] ~ { d: REF TransformData ¬ NEW[TransformData ¬ [action, clientContext, clientData]]; RETURN[ImagerRaster.Create[class: transformClass, deviceClass: deviceClass, deviceParm: deviceParm, data: d, pixelUnits: TRUE]]; }; NullMaskBoxes: PROC [device: Device, bounds: SF.Box, boxes: SF.BoxGenerator] ~ {}; NullSetColor: PROC [device: Device, color: Color, viewToDevice: Transformation]~{}; deviceClass: ImagerDevice.DeviceClass ~ NEW[ImagerDevice.DeviceClassRep ¬[SetColor: NullSetColor, MaskBoxes: NullMaskBoxes]]; deviceParm: ImagerDevice.DeviceParm ~ ImagerDevice.MakeDeviceParm[ class: deviceClass, sSize: 1, fSize: 1, scanMode: [slow: down, fast: right], surfaceUnitsPerInch: [1, 1], surfaceUnitsPerPixel: 1, fontCache: NIL ]; transformClass: ImagerPrivate.Class ¬ MakeTransformClass[]; MakeTransformClass: PROC RETURNS [class: ImagerPrivate.Class] ~ { class ¬ ImagerRaster.CreateClass[type: $Transform]; class.MaskFill ¬ TransformPath; class.MaskStroke ¬ TransformMaskStroke; }; TransformMaskStroke: PROC [context: Context, path: PathProc, closed: BOOL] ~ { TransformPath[context, path, FALSE]; }; TransformPath: PROC [context: Context, path: PathProc, oddWrap: BOOL] ~ { d: REF TransformData ¬ NARROW[ImagerRaster.GetDevice[context].data]; matrix: Transformation ¬ ImagerBackdoor.GetT[context]; in: Outline ¬ ImagerPath.OutlineFromPath[path, oddWrap, matrix]; out: Outline ¬ DoOutline[in, d.action, d.clientData]; Imager.MaskFillOutline[d.clientContext, out]; }; DoOutline: PROC [in: Outline, action: TransformProc, clientData: REF ANY] RETURNS [out: Outline] ~ { Path: PathProc ~ {ImagerPath.MapOutline[in, moveTo, lineTo, curveTo, conicTo, arcTo]}; Close: PROC ~ { IF trajectory # NIL AND fp # lp THEN Line[fp]; trajectories ¬ CONS[trajectory, trajectories]; trajectory ¬ NIL; }; Move: PROC [p: VEC] ~ { IF trajectory # NIL THEN Close[]; fp ¬ lp ¬ p; trajectory ¬ ImagerPath.MoveTo[action[p, clientData]]; }; Line: PROC [p1: VEC] ~ { IF lp # p1 THEN { lp ¬ p1; trajectory ¬ ImagerPath.LineTo[trajectory, action[p1, clientData]]; }; }; Curve: PROC [p1, p2, p3: VEC] ~ { lp ¬ p3; trajectory ¬ ImagerPath.CurveTo[ trajectory, action[p1, clientData], action[p2, clientData], action[p3, clientData]]; }; fp, lp: VEC ¬ [0, 0]; trajectory: ImagerPath.Trajectory ¬ NIL; trajectories: ImagerPath.TrajectoryList ¬ NIL; ImagerPath.Transform[path: Path, moveTo: Move, lineTo: Line, curveTo: Curve]; IF trajectory # NIL THEN Close[]; out ¬ NEW[ImagerPath.OutlineRep[in.size]]; out.oddWrap ¬ in.oddWrap; FOR i: NAT IN [0..out.size) DO out[i] ¬ trajectories.first; trajectories ¬ trajectories.rest; ENDLOOP; }; END. Æ G2dOutlineImpl.mesa Copyright Ó 1987, 1992 by Xerox Corporation. All rights reserved. Loosely based on Michael Plass's /Ivy/Plass/Overnight/RefitImpl.mesa. Bloomenthal, July 2, 1992 5:16 pm PDT Michael Plass, September 19, 1989 9:56:25 am PDT Types and Constants Procedures to Manipulate Imager Outlines [Artwork node; type 'Artwork on' to command tool] Getting an Imager Context Imager.ScaleT[c, 1.0]; -- to increase resolution? Transforming Ê+¥–"cedarcode" style•NewlineDelimiter ™šœ™Jšœ Ïeœ7™BJšœE™EJ™%J™0J™—šÏk œ‘žœ.˜ÊJ˜—šÐlnœž ˜JšžœÏzœC˜`Jšžœ ˜—Jšœž˜headšÏl™Jšœžœ˜0Jšœžœ˜ Jšœžœ˜!Jšœ žœ˜&Jšœžœ˜Jšœ žœ˜&Jšœžœ˜$Jšœžœ'˜;Jšžœžœžœ˜Jšœžœ˜&Jšœžœ˜2Jšžœžœ žœ˜—š¡(™(• InterpressÙInterpress/Xerox/3.0  f j k j¡¥“ļ= ¤ ¨ x jœÄÖHI ¢ ¨ x j x jÄÞ{_ ¢ ¨¡¡¨ÎÄ­*aŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —Á clientContext–ÄOÄÇãsŠ  —ÁclientTransform–ÄiÄé_ŠŠ  —Á clientData – k k x j x jÄÝXÑ ¢ ¨¡¡¨ÀĘš_ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —ÁTransformSelected– k¢¯“¢°“¢·“¡¡¨¦Ä&[Ñ™Ä|ÅSDŽÄ&[Ñ¦Ž¡¸ k x j x jĺ°Ñ ¢ ¨¡¡¨Ä#Ęš_ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —ÁMakeTransformContext– k¢¯“¢°“¢·“¡¡¨¦Ä³Ñ™Äe¥LDŽÄ³Ñ¦Ž¡¸ k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨õ3™Ä|ÅSÄ{µ^ÄÐ#‰—õÄ|ÅS—Ä~·^ÄÐ#‰—˜ k x j x jÄ·_’ ¢ ¨¡¡¨»Ä˜š_ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —ÁTiogaImager.Render– k¢¯“¢°“¢·“¡¡¨¦ÄCÖ?™Ä3,DŽÄCÖ?¦Ž¡¸ k x j x jÄÿrÖ ¢ ¨¡¡¨½Ä˜š_ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —ÁTransformMaskFill– k¢¯“¢°“¢·“¡¡¨¦ÄÂñÖ™ÄS{SDŽÄÂñ֦ޡ¸ k x j x jÄÿOgÕ ¢ ¨¡¡¨ÄmĘš_ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —Á DoOutline– k¢¯“¢°“¢·“¡¡¨¦Äž¶Õ™Ä DŽÄž¶Õ¦Ž¡¸ k x j x jÄ·_I ¢ ¨¡¡¨°Ä˜š_ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —ÁImager.MaskFillOutline– k¢¯“¢°“¢·“¡¡¨¦Ä*JI™Ä=Y[DŽÄ*JI¦Ž¡¸ k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨õÄ&[Ñ™Äe¥LÄ{µ^Ä;,—õÄe¥L—Ä~·^Ä;,—˜ k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨õijљÄ3,Ä{µ^ÄV²I—õÄ3,—Ä~·^ÄV²I—˜ k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨õ²™ÄRòSÄ{µ^Ä‹‰—õÄRòS—Ä~·^Ä‹‰—˜ k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨õÄÂñÖ™Ä Ä{µ^ÄIV—õÄ —Ä~·^ÄIV—˜ k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨õÄž¶Õ™Ä=Y[Ä{µ^Ä< W—õÄ=Y[—Ä~·^Ä< W—˜ k x j x jÄÿOgÕ ¢ ¨¡¡¨ÆÄ˜š_ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —ÁClientTransform– k¢¯“¢°“¢·“¡¡¨ˆÄž¶Õ™Ä &ŽÄž¶ÕˆŽ¡¸ k x j x j Äœ4y ¢ ¨¡¡¨ÄoÄeA>ŠÅXeroxÅ TiogaFontsÅ TimesRoman10£¡ “ •  —Á(x,y)– k k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨DÄ_x™ÄQMŽˆŽÄ±¯^Ä& 1—ˆÄ_x—ı¯^Ä?àO—˜ kÄ¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨Ä ™׎˜ kÄ¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨×Ä ™˜ k¡¡¨ ¡ ¡™ x j¢¯“¢°“¢·“¡¡¨Ä ™Ä‰©^ÄIV—Ä —ÄŒ«^ÄIV—˜ k k k g•Artwork Interpress•Bounds:0.0 mm xmin 0.0 mm ymin 136.8778 mm xmax 107.3579 mm ymax –é110.1801 mm bigger topLeading 110.1801 mm bigger topIndent 1.411111 mm bigger bottomLeading 0.5 0.3 0.95 backgroundColor the topLeading 6 pt .sub backgroundAscent 3 pt backgroundDescent 4 pt outlineBoxThickness 1 pt outlineBoxBearoff•GGFile´4Gargoyle file for scene: stuffed from ///Users/Bloomenthal.pa/gg/g2doutline.gg at September 28, 1988 9:46:13 pm PDT Produced by version 8803.24 Scripts: Slope: [F 150.0] [F 135.0] [F 120.0] [F 90.0] [F 60.0] [F 45.0] [F 30.0] [F 0.0] Angle: [T 90.0] [F 60.0] [F 45.0] [F 30.0] [T 0.0] [F -30.0] [F -45.0] [F -60.0] [F -90.0] Radius: [F 5.555556e-2 1/18] [F 0.1111111 1/9] [F 0.125 1/8] [F 0.25 1/4] [F 0.3333333 1/3] [F 0.5 1/2] [F 0.6666667 2/3] [F 0.75 3/4] [F 1.0 1] [F 2.0 2] [F 4.0 4] LineDistance: [F 0.0 0] [F 5.555556e-2 1/18] [F 0.1111111 1/9] [F 0.5 1/2] [F 1.0 1] Midpoints: F Heuristics: F ShowAlignments: T ShowColors: F ScaleUnit: 72.0 DisplayStyle: print Gravity: F GravityExtent: 8.680555e-2 GravityType: pointsPreferred DefaultFont: xerox/pressfonts/helvetica-mrr [r1: 0.0 s: [14.29637 14.29637] r2: 0.0] 1.0 1.0 Defaults: [1 0.5] [1 1.0] 2.0 round round Dashed: F Shadows: []F Anchor: F PaletteForFillColor: F PaletteForStrokeColor: F Entities: [19]: Box [265.0,415.8243] [423.0,473.0703] [1.0 0.0 -3.0 0.0 1.0 -24.4473] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [] [] [] [] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 89 clientContext clientTransform clientData Ê'˜Icenteršœ)˜)—…—,Y Box [265.0,403.0] [423.0,427.281] [1.0 0.0 -3.0 0.0 1.0 -42.44977] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [1 1.0] [1 1.0] [1 1.0] [1 1.0] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 65 TransformSelected Ê'˜Icenteršœ˜—…—A Box [265.0,403.0] [423.0,427.281] [1.0 0.0 -3.0 0.0 1.0 -84.89954] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [1 1.0] [1 1.0] [1 1.0] [1 1.0] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 67 MakeTransformContext Ê'˜Icenteršœ˜—…—C Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [4] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [341.0,403.0] (Line ) [341.0,384.8313] (Line ) [336.9043,388.927] (Line ) [341.0,384.8313] (Line ) [345.0957,388.927] fwd: T Box [265.0,403.0] [423.0,427.281] [1.0 0.0 -3.0 0.0 1.0 -127.3493] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [1 1.0] [1 1.0] [1 1.0] [1 1.0] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 65 TiogaImager.Render Ê'˜Icenteršœ˜—…—A Box [265.0,403.0] [423.0,427.281] [1.0 0.0 -3.0 0.0 1.0 -169.7991] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [1 1.0] [1 1.0] [1 1.0] [1 1.0] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 65 TransformMaskFill Ê'˜Icenteršœ˜—…—A Box [265.0,403.0] [423.0,427.281] [1.0 0.0 -3.0 0.0 1.0 -212.2488] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [1 1.0] [1 1.0] [1 1.0] [1 1.0] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 57 DoOutline Ê'˜Icenteršœ ˜ —…— 9 Box [265.0,403.0] [423.0,427.281] [1.0 0.0 -3.0 0.0 1.0 -254.6986] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [1 1.0] [1 1.0] [1 1.0] [1 1.0] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 69 Imager.MaskFillOutline Ê'˜Icenteršœ˜—…—E Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [4] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [341.0,360.5502] (Line ) [341.0,342.3815] (Line ) [336.9043,346.4772] (Line ) [341.0,342.3815] (Line ) [345.0957,346.4772] fwd: T Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [4] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [341.0,318.1004] (Line ) [341.0,299.9318] (Line ) [336.9043,304.0274] (Line ) [341.0,299.9318] (Line ) [345.0957,304.0274] fwd: T Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [4] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [341.0,274.0] (Line ) [341.0,255.8313] (Line ) [336.9043,259.927] (Line ) [341.0,255.8313] (Line ) [345.0957,259.927] fwd: T Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [4] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [341.0,233.2009] (Line ) [341.0,215.0322] (Line ) [336.9043,219.1279] (Line ) [341.0,215.0322] (Line ) [345.0957,219.1279] fwd: T Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [4] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [341.0,190.7512] (Line ) [341.0,172.5825] (Line ) [336.9043,176.6781] (Line ) [341.0,172.5825] (Line ) [345.0957,176.6781] fwd: T Box [265.0,403.0] [423.0,427.281] [1.0 0.0 223.0 0.0 1.0 -212.2488] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [1 1.0] [1 1.0] [1 1.0] [1 1.0] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 63 ClientTransform Ê'˜Icenteršœ˜—…—? Box [265.0,403.0] [393.0,434.1405] [1.0 0.0 128.0 0.0 1.0 -211.1405] strokeWidths: ( 2.0 2.0 2.0 2.0 ) strokeEnds: ( round round round round ) strokeColors: ( [] [] [] [] ) fillColor: [] dashes: ( F F F F ) props: ( ( F ) ( F ) ( F ) ( F ) ) fwd: T fillText: T 53 (x,y) Ê'˜Icenteršœ˜—…—5 Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [5] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [420.0,202.8917] (Line ) [469.8313,202.8917] (Line ) [488.0,202.8917] (Line ) [483.9043,198.796] (Line ) [488.0,202.8917] (Line ) [483.9043,206.9874] fwd: T Outline fillColor: [1 0.5] ow: T fillText: T 0 Trajectories: [1] Traj (open) [2] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [379.0,215.0322] (Line ) [379.0,223.0] (Line ) [567.0,223.0] fwd: T Outline fillColor: [1 0.5] ow: T fillText: T 0 Trajectories: [1] Traj (open) [1] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [567.0,215.0322] (Line ) [567.0,223.0] fwd: T Outline fillColor: [1 1.0] ow: T fillText: T 0 Trajectories: [1] Traj (open) [3] arrows: 0 j: round e: T round w: 2.0 c: T [1 1.0] d: T F [379.0,215.0322] (Line ) [374.9043,219.1279] (Line ) [379.0,215.0322] (Line ) [383.0957,219.1279] fwd: T šÏn3™3J˜J˜—š¢œžœžœ˜ J˜Jšœ˜Jšœ˜Jšœ žœ˜Jšœ žœžœžœ˜J˜šžœ žœžœ˜Jšœžœ+˜Kšžœ žœžœ˜J˜Cšžœ žœžœ˜J˜NJšœ8˜8J˜—J˜—J˜—J˜J˜—š¢ œžœžœ˜Jšœžœ˜ Jšœ˜Jšœ˜Jšœžœ˜Jšœ žœ˜Jšœžœ˜Jšœ žœ˜Jšœ žœžœžœ˜J˜J˜NJ˜'Jšžœžœžœ(˜:Jšžœ žœžœ*˜=Jšœ(˜(J˜——š¡™šœžœžœ˜J˜J˜Jšœžœž˜J˜J˜—š¢œž œ˜#Jšœ˜Jšœ˜Jšœ žœžœ˜Jšžœ ˜Jšœ˜J•StartOfExpansionr[class: ImagerPrivate.Class, deviceParm: ImagerDevice.DeviceParm, data: REF ANY, pixelUnits: BOOL _ FALSE]šœžœžœ6˜PJ–›[class: ImagerPrivate.Class, deviceClass: ImagerDevice.DeviceClass, deviceParm: ImagerDevice.DeviceParm, data: REF ANY, pixelUnits: BOOL _ FALSE]šžœsžœ˜€Jšœ1™1Jšœ˜J˜—š¢ œžœžœ žœ˜RJ˜—š¢ œžœA˜SJ˜—Jšœ(žœ¢œ¢ œ˜}šœB˜BJšœ˜Jšœ ˜ Jšœ ˜ Jšœ$˜$Jšœ˜Jšœ˜Jšœ ž˜Jšœ˜J˜—˜;J˜—š¢œžœžœ!˜AJ–7[type: ATOM, deviceClass: ImagerDevice.DeviceClass]˜3J˜J˜'Jšœ˜——š¡ ™ šÏbœžœ,žœ˜NJšœžœ˜$Jšœ˜J˜—š¢ œžœ-žœ˜IJšœžœžœ'˜DJ˜6J˜@J˜5Jšœ-˜-Jšœ˜J˜—š¢ œžœ2žœžœ˜IJšžœ˜Jšœ˜Jš¢œR˜Vš¢œžœ˜Jšžœžœžœ žœ ˜.Jšœžœ˜.Jšœ žœ˜Jšœ˜—š¢œžœžœ˜Jšžœžœžœ ˜!J˜ J˜6Jšœ˜—– -- [p: VEC]š¢œžœžœ˜šžœ žœ˜J˜J˜CJ˜—Jšœ˜—š¢œžœžœ˜!J˜˜ JšœT˜T—Jšœ˜—Jšœžœ ˜J– -- [p: VEC]šœ$žœ˜(Jšœ*žœ˜.JšœM˜MJšžœžœžœ ˜!Jšœžœ!˜*J˜šžœžœžœž˜J˜J˜!Jšžœ˜—Jšœ˜——J˜Jšž˜J˜—…—0?›