authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-06 16:24:32-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-06 16:24:32-07:00
log200c25e12ad5083feb3e7594ccf16959042c6c8f
treea0c0048d75e32732cd35b1f0488048b5b35b1ee9
parent1c1d0b1a96f8a3a9a9d12d82a7f8089296a13163
signature Signed by SSH key SHA256:52mNGHRsVFBDED9IAX5pe+LRWUefqTbxEReunq21QvU

feat: add the Snowbound app icon

Sequoia, Snow Leopard and Tahoe variants with their Blender, Fusion and Icon Composer sources, render scripts and packaging script. Assisted-by: gpt-6-astra Assisted-by: claude-fable-5.1

24 files changed, 793 insertions(+), 0 deletions(-)

crates/snowbound/assets/icon/Snowbound-Sequoia.icns created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-Sequoia.icns differ
crates/snowbound/assets/icon/Snowbound-Sequoia.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-Sequoia.png differ
crates/snowbound/assets/icon/Snowbound-SnowLeopard.icns created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-SnowLeopard.icns differ
crates/snowbound/assets/icon/Snowbound-SnowLeopard.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-SnowLeopard.png differ
crates/snowbound/assets/icon/Snowbound-Tahoe-Dark.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-Tahoe-Dark.png differ
crates/snowbound/assets/icon/Snowbound-Tahoe-Mono.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-Tahoe-Mono.png differ
crates/snowbound/assets/icon/Snowbound-Tahoe.icns created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-Tahoe.icns differ
crates/snowbound/assets/icon/Snowbound-Tahoe.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/Snowbound-Tahoe.png differ
crates/snowbound/assets/icon/renders/Sequoia.exr created
Binary files /dev/null and b/crates/snowbound/assets/icon/renders/Sequoia.exr differ
crates/snowbound/assets/icon/renders/Sequoia.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/renders/Sequoia.png differ
crates/snowbound/assets/icon/renders/SnowLeopard.exr created
Binary files /dev/null and b/crates/snowbound/assets/icon/renders/SnowLeopard.exr differ
crates/snowbound/assets/icon/renders/SnowLeopard.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/renders/SnowLeopard.png differ
crates/snowbound/assets/icon/showcase.png created
Binary files /dev/null and b/crates/snowbound/assets/icon/showcase.png differ
crates/snowbound/assets/icon/sources/Snowbound-Finishing.comp created+614
......@@ -0,0 +1,614 @@
1Composition {
2 CurrentTime = 0,
3 RenderRange = { 0, 0 },
4 GlobalRange = { 0, 1 },
5 CurrentID = 72,
6 HiQ = true,
7 PlaybackUpdateMode = 0,
8 StereoMode = false,
9 Version = "Fusion Studio 20.3.1 build 5",
10 SavedOutputs = 0,
11 HeldTools = 0,
12 DisabledTools = 0,
13 LockedTools = 0,
14 AudioOffset = 0,
15 Resumable = true,
16 OutputClips = {
17 "Comp:/../Snowbound-Sequoia0000.png",
18 "Comp:/../Snowbound-SnowLeopard0000.png"
19 },
20 Tools = {
21 Notebook_2010 = Loader {
22 Clips = {
23 Clip {
24 ID = "Clip1",
25 Filename = "Comp:/../renders/SnowLeopard.png",
26 FormatID = "PNGFormat",
27 StartFrame = -1,
28 LengthSetManually = true,
29 TrimIn = 0,
30 TrimOut = 0,
31 ExtendFirst = 0,
32 ExtendLast = 0,
33 Loop = 0,
34 AspectMode = 0,
35 Depth = 0,
36 TimeCode = 0,
37 GlobalStart = 0,
38 GlobalEnd = 0
39 }
40 },
41 CtrlWZoom = false,
42 Inputs = {
43 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
44 ["Clip1.PNGFormat.PostMultiply"] = Input { Value = 1, }
45 },
46 ViewInfo = OperatorInfo { Pos = { 55, 82.197 } },
47 },
48 Notebook_15 = Loader {
49 Clips = {
50 Clip {
51 ID = "Clip1",
52 Filename = "Comp:/../renders/Sequoia.png",
53 FormatID = "PNGFormat",
54 StartFrame = -1,
55 LengthSetManually = true,
56 TrimIn = 0,
57 TrimOut = 0,
58 ExtendFirst = 0,
59 ExtendLast = 0,
60 Loop = 0,
61 AspectMode = 0,
62 Depth = 0,
63 TimeCode = 0,
64 GlobalStart = 0,
65 GlobalEnd = 0
66 }
67 },
68 Inputs = {
69 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
70 ["Clip1.PNGFormat.PostMultiply"] = Input { Value = 1, }
71 },
72 ViewInfo = OperatorInfo { Pos = { 55, 148.197 } },
73 },
74 Dock_shadow_2010 = Shadow {
75 Inputs = {
76 ShadowOffset = Input { Value = { 0.503, 0.494 }, },
77 Softness = Input { Value = 0.012, },
78 Alpha = Input { Value = 0.25, },
79 Input = Input {
80 SourceOp = "Finish_2010",
81 Source = "Output",
82 }
83 },
84 ViewInfo = OperatorInfo { Pos = { 495, 82.197 } },
85 },
86 Export_15 = Saver {
87 CtrlWZoom = false,
88 Inputs = {
89 ["OpenEXRFormat.ZipCompressionLevel"] = Input {
90 Value = Number {
91 Value = 4
92 },
93 },
94 ProcessWhenBlendIs00 = Input { Value = 0, },
95 Clip = Input {
96 Value = Clip {
97 Filename = "Comp:/../Snowbound-Sequoia0000.png",
98 FormatID = "PNGFormat",
99 Saving = true,
100 LengthSetManually = true,
101 TrimIn = 0,
102 TrimOut = 0,
103 ExtendFirst = 0,
104 ExtendLast = 0,
105 Loop = 1,
106 AspectMode = 0,
107 Depth = 0,
108 TimeCode = 0,
109 GlobalStart = 0,
110 GlobalEnd = 0
111 },
112 },
113 OutputFormat = Input { Value = FuID { "PNGFormat" }, },
114 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
115 Input = Input {
116 SourceOp = "Dock_shadow_15",
117 Source = "Output",
118 },
119 ["PNGFormat.PreDivide"] = Input { Value = 1, }
120 },
121 ViewInfo = OperatorInfo { Pos = { 715, 148.197 } },
122 },
123 Finish_2010 = ColorCorrector {
124 CtrlWZoom = false,
125 Inputs = {
126 ColorRanges = Input {
127 Value = ColorCurves {
128 Curves = {
129 {
130 Points = {
131 { 0, 1 },
132 { 0.4, 0.2 },
133 { 0.6, 0 },
134 { 1, 0 }
135 }
136 },
137 {
138 Points = {
139 { 0, 0 },
140 { 0.4, 0 },
141 { 0.6, 0.2 },
142 { 1, 1 }
143 }
144 }
145 }
146 },
147 },
148 PreDividePostMultiply = Input { Value = 1, },
149 HistogramIgnoreTransparent = Input { Value = 1, },
150 Input = Input {
151 SourceOp = "Notebook_2010",
152 Source = "Output",
153 }
154 },
155 ViewInfo = OperatorInfo { Pos = { 275, 82.197 } },
156 },
157 Finish_15 = ColorCorrector {
158 CtrlWZoom = false,
159 Inputs = {
160 ColorRanges = Input {
161 Value = ColorCurves {
162 Curves = {
163 {
164 Points = {
165 { 0, 1 },
166 { 0.4, 0.2 },
167 { 0.6, 0 },
168 { 1, 0 }
169 }
170 },
171 {
172 Points = {
173 { 0, 0 },
174 { 0.4, 0 },
175 { 0.6, 0.2 },
176 { 1, 1 }
177 }
178 }
179 }
180 },
181 },
182 PreDividePostMultiply = Input { Value = 1, },
183 HistogramIgnoreTransparent = Input { Value = 1, },
184 Input = Input {
185 SourceOp = "Notebook_15",
186 Source = "Output",
187 }
188 },
189 ViewInfo = OperatorInfo { Pos = { 275, 148.197 } },
190 },
191 Export_2010 = Saver {
192 Inputs = {
193 ["OpenEXRFormat.ZipCompressionLevel"] = Input {
194 Value = Number {
195 Value = 4
196 },
197 },
198 ProcessWhenBlendIs00 = Input { Value = 0, },
199 Clip = Input {
200 Value = Clip {
201 Filename = "Comp:/../Snowbound-SnowLeopard0000.png",
202 FormatID = "PNGFormat",
203 Saving = true,
204 LengthSetManually = true,
205 TrimIn = 0,
206 TrimOut = 0,
207 ExtendFirst = 0,
208 ExtendLast = 0,
209 Loop = 1,
210 AspectMode = 0,
211 Depth = 0,
212 TimeCode = 0,
213 GlobalStart = 0,
214 GlobalEnd = 0
215 },
216 },
217 OutputFormat = Input { Value = FuID { "PNGFormat" }, },
218 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
219 Input = Input {
220 SourceOp = "Dock_shadow_2010",
221 Source = "Output",
222 },
223 ["PNGFormat.PreDivide"] = Input { Value = 1, }
224 },
225 ViewInfo = OperatorInfo { Pos = { 715, 82.197 } },
226 },
227 Dock_shadow_15 = Shadow {
228 Inputs = {
229 ShadowOffset = Input { Value = { 0.503, 0.494 }, },
230 Softness = Input { Value = 0.012, },
231 Alpha = Input { Value = 0.25, },
232 Input = Input {
233 SourceOp = "Finish_15",
234 Source = "Output",
235 }
236 },
237 ViewInfo = OperatorInfo { Pos = { 495, 148.197 } },
238 }
239 },
240 Frames = {
241 {
242 FrameTypeID = "ChildFrame",
243 Mode = 3,
244 LayoutPreset = 0,
245 PresetName = "Default",
246 Left = 0,
247 Top = 27,
248 Width = 1280,
249 Height = 644,
250 ZoneInfo = {
251 AuxRight = { Expanded = true },
252 ["!Left"] = {
253 },
254 AuxLeft = { Expanded = true },
255 Right = { Expanded = true, },
256 Left = { Expanded = false, },
257 ["!Right"] = {
258 }
259 },
260 ViewInfo = {
261 Viewer1 = { Show = true, RatioY = 0.01, RatioX = 1, },
262 InnerLeft = {
263 },
264 MainSplit = {
265 RatioX = 100,
266 RatioY = 0.998344370860927,
267 },
268 CenterSplit = {
269 RatioX = 1,
270 RatioY = 100,
271 },
272 Viewer2 = { Show = true, RatioY = 0.01, RatioX = 1, },
273 Comments = { Show = false },
274 Time = { Show = true, RatioX = 100, },
275 InnerColumns = {
276 RatioX = 100,
277 RatioY = 2.00165562913907,
278 },
279 Keyframes = { Show = true, Adjust = false, RatioY = 100, MRU = 2, RatioX = 0.999999999999999, },
280 LayoutStrip = { Show = true, RatioX = 100, },
281 Inspector = { Show = true, RatioY = 1, RatioX = 100, },
282 InnerRight = {
283 },
284 MediaPool = { Show = false, },
285 OuterColumns = {
286 RatioX = 100,
287 RatioY = 1,
288 },
289 Effects = { Show = false, },
290 ActionStrip = { Show = false, Adjust = true, MRU = 0, RatioX = 100, },
291 Metadata = { Show = false, },
292 OuterLeft = {
293 },
294 ViewerSplit = {
295 RatioX = 100,
296 RatioY = 1,
297 },
298 Nodes = { Show = true, RatioY = 100, RatioX = 0.999999999999999, },
299 OuterRight = {
300 PixelX = 420,
301 RatioY = 100,
302 },
303 Clips = { Show = false, },
304 Spline = { Show = true, Adjust = false, RatioY = 100, MRU = 1, RatioX = 0.999999999999999, }
305 },
306 Views = ordered() {
307 Effects = MultiView {
308 Active = "EffectView",
309 ViewList = ordered() {
310 EffectView = "EffectView"
311 },
312 },
313 Nodes = MultiView {
314 Active = "FlowView",
315 ViewList = ordered() {
316 FlowView = "FlowView"
317 },
318 FlowView = FlowView {
319 Flags = {
320 Navigator = true,
321 AutoHideNavigator = true,
322 AutoSnap = true,
323 RemoveRouters = true
324 },
325 NavigatorSize = { 200, 140 },
326 Direction = "Horizontal",
327 PipeStyle = "Direct",
328 RootScale = 1,
329 RootOffset = { 130, 29 }
330 }
331 },
332 Keyframes = MultiView {
333 Active = "TimelineView",
334 ViewList = ordered() {
335 TimelineView = "TimelineView"
336 },
337 TimelineView = TimelineView {
338 TreeControlState = {
339 },
340 DisplayMode = "All Tools",
341 ShowCurrentTimeTools = false,
342 Filter = "Show All",
343 ShowSelectedTools = false,
344 ShowAnimatedToolsOnly = false,
345 ShowEditBoxes = false,
346 KeyFrameView = {
347 Position = { Left = 232, Bottom = 139 },
348 ScaleX = 2.28215767634855,
349 OffsetX = -11.4107883817427,
350 OffsetY = 0,
351 AutoScaling = "scroll",
352 AutoSnapTo = "frame",
353 AutoSnapToGuidelines = true,
354 GuidelinesGrabEnabled = true,
355 GuidelinesSnapTo = "none"
356 },
357 Spreadsheet = { LeftPos = 232, Visible = false }
358 }
359 },
360 Spline = MultiView {
361 Active = "SplineView",
362 ViewList = ordered() {
363 SplineView = "SplineEditorView"
364 },
365 SplineView = SplineEditorView {
366 LeftPos = 264,
367 ScaleX = 0.2,
368 ScaleY = 0.00338983050847458,
369 OffsetX = -0.2,
370 OffsetY = 0,
371 AutoScaling = "scroll",
372 AutoSnapTo = "frame",
373 AutoSnapToGuidelines = true,
374 GuidelinesSnapTo = "frame",
375 ShowKeyMarkers = false,
376 IndependentHandles = false,
377 ShowNonSplineModifiers = false,
378 GuidelinesGrabEnabled = true,
379 ShowOneToolOnly = false,
380 ShowSelectedTools = false,
381 ShowAllInputs = false,
382 Filter = "Show All"
383 }
384 },
385 Inspector = MultiView {
386 Active = "Tools",
387 ViewList = ordered() {
388 Tools = "ControlView",
389 Modifiers = "ModifierView"
390 },
391 },
392 Viewer1 = MultiView {
393 Active = "LeftView",
394 ViewList = ordered() {
395 LeftView = "PreviewContainer"
396 },
397 },
398 Viewer2 = MultiView {
399 Active = "RightView",
400 ViewList = ordered() {
401 RightView = "PreviewContainer"
402 },
403 },
404 Time = "TimeView",
405 ActionStrip = "ActionStripView",
406 LayoutStrip = "LayoutStripView"
407 },
408 Layout = {
409 { ID = "LayoutStrip", FixedY = 36, Resolve = false, Flat = true },
410 {
411 {
412 { ID = "MediaPool", Fusion = false, RatioX = 1 },
413 { ID = "Effects", RatioX = 1 },
414 Zone = "Left",
415 Rows = 2,
416 PaneID = "OuterLeft",
417 PixelX = 420
418 },
419 {
420 {
421 {
422 { ID = "MediaPool", Fusion = false, RatioX = 1 },
423 { ID = "Effects", RatioX = 1 },
424 PaneID = "InnerLeft",
425 MaxViews = 1,
426 PixelX = 420,
427 Rows = 2,
428 Zone = "!Left"
429 },
430 {
431 {
432 { ID = "Viewer1", RatioY = 0.01, RatioX = 1 },
433 { ID = "Viewer2", RatioX = 1 },
434 RatioY = 1,
435 Columns = 2,
436 PaneID = "ViewerSplit"
437 },
438 { ID = "Time", FixedY = 83, Flat = true },
439 RatioX = 1,
440 Rows = 2
441 },
442 {
443 { ID = "Inspector", RatioY = 1 },
444 { ID = "Metadata", RatioY = 1, Fusion = false },
445 PaneID = "InnerRight",
446 MaxViews = 1,
447 PixelX = 420,
448 Rows = 2,
449 Zone = "!Right"
450 },
451 RatioY = 2,
452 Columns = 3,
453 PaneID = "InnerColumns"
454 },
455 { ID = "ActionStrip", FixedY = 50, Flat = true },
456 {
457 { ID = "Nodes", RatioX = 1 },
458 { ID = "Spline", RatioX = 1 },
459 { ID = "Keyframes", RatioX = 1 },
460 RatioY = 1,
461 Columns = 3,
462 PaneID = "MainSplit"
463 },
464 { Fusion = false, ID = "Clips", LARGE_FixedY = 160, MEDIUM_FixedY = 138, SMALL_FixedY = 110 },
465 RatioX = 1,
466 Rows = 4,
467 PaneID = "CenterSplit"
468 },
469 {
470 { ID = "Inspector", RatioY = 1 },
471 { ID = "Metadata", RatioY = 1, Fusion = false },
472 Zone = "Right",
473 Rows = 2,
474 PaneID = "OuterRight",
475 PixelX = 420
476 },
477 RatioY = 1,
478 Columns = 3,
479 PaneID = "OuterColumns"
480 },
481 RatioX = 1,
482 Rows = 2,
483 RatioY = 1
484 },
485 TopBar = {
486 Left = { "Left", "MediaPool", "Effects", "Clips", "Nodes", "Console" },
487 Right = { "Spline", "Keyframes", "Metadata", "Inspector", "Right" }
488 }
489 }
490 },
491 Prefs = {
492 Comp = {
493 AutoSave = {
494 Delay = 60,
495 },
496 Memory = {
497 FramesAtOnce = 4,
498 Interactive = {
499 SimultaneousBranching = true,
500 }
501 },
502 Views = {
503 RightView = {
504 Viewer = {
505 Layer = ":Default"
506 },
507 },
508 LeftView = {
509 Viewer = {
510 Layer = ":Default"
511 },
512 },
513 View1 = {
514 PickH = 1,
515 PickW = 1,
516 AlwaysOnTop = true,
517 FullScreen = false,
518 },
519 Defaults = {
520 View3D = {
521 Options = {
522 ShowUVTangentVectors = false
523 },
524 TextureDepth = "int8"
525 },
526 Guides = {
527 SafeTitle = true,
528 SafeImage = true,
529 Center = true,
530 },
531 MaterialViewer = {
532 Options = {
533 TextureDepth = "int8"
534 },
535 },
536 },
537 ["Image View"] = {
538 Viewer = {
539 ScaleMode = 1
540 }
541 }
542 },
543 Preview = {
544 SkipFrames = true,
545 ActiveLoaders = false,
546 ActiveSavers = false,
547 },
548 Paths = {
549 Map = {
550 ["ResolveCaches:"] = "Temp:DiskCache",
551 },
552 },
553 FrameFormat = {
554 Width = 1024,
555 Height = 1024,
556 GuideRatio = 1.77777777777778,
557 },
558 Unsorted = {
559 GlobalEnd = 1,
560 RenderSettings = {
561 Configs = {
562 Preview = {
563 StepRender = false,
564 PriorityClasses = "all",
565 ShowRenderNodes = false,
566 SizeType = 1,
567 CustomAspect = true,
568 CustomHeight = 160,
569 StepSize = 5,
570 CustomWidth = 200,
571 MotionBlur = true,
572 UpdateMode = "Some",
573 UseNetwork = false,
574 Quality = true
575 },
576 Final = {
577 StepRender = false,
578 PriorityClasses = "all",
579 ShowRenderNodes = false,
580 SizeType = 1,
581 CustomAspect = true,
582 CustomHeight = 160,
583 StepSize = 5,
584 CustomWidth = 200,
585 MotionBlur = true,
586 UpdateMode = "Some",
587 UseNetwork = false,
588 Quality = true
589 }
590 },
591 PreviewConfig = "Preview",
592 CurrentConfig = "Final"
593 }
594 },
595 Tweaks = {
596 OpenCL = {
597 Enable = 2,
598 Caching = 2
599 }
600 },
601 LUTView = {
602 ShowTips = true,
603 },
604 Cluster = {
605 SlaveClasses = "all"
606 },
607 FlowView = {
608 FullToolIndicator = false
609 },
610 QuickTime = {
611 },
612 }
613 },
614}
crates/snowbound/assets/icon/sources/Snowbound-Physical.blend created
Binary files /dev/null and b/crates/snowbound/assets/icon/sources/Snowbound-Physical.blend differ
crates/snowbound/assets/icon/sources/Snowbound-Sequoia.blend created
Binary files /dev/null and b/crates/snowbound/assets/icon/sources/Snowbound-Sequoia.blend differ
crates/snowbound/assets/icon/sources/Snowbound-Tahoe.icon/Assets/Snowflake.svg created+1
......@@ -0,0 +1 @@
1<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024"><path fill="#064370" d="M427.583,770.716 L427.041,770.787 L424.972,770.957 L424.426,770.974 L422.351,770.940 L421.806,770.905 L419.743,770.668 L419.204,770.579 L417.175,770.140 L416.648,769.999 L414.671,769.364 L414.160,769.171 L412.255,768.346 L411.765,768.104 L409.951,767.096 L409.487,766.807 L407.780,765.626 L407.347,765.293 L405.764,763.950 L405.365,763.577 L403.921,762.085 L403.561,761.675 L402.271,760.048 L401.952,759.605 L400.827,757.860 L400.554,757.387 L399.606,755.540 L399.380,755.043 L398.617,753.112 L398.442,752.595 L397.872,750.599 L397.748,750.067 L397.376,748.024 L397.305,747.483 L397.135,745.414 L397.117,744.868 L397.151,742.792 L397.187,742.247 L397.424,740.185 L397.513,739.646 L397.952,737.617 L398.093,737.089 L398.728,735.112 L398.920,734.601 L399.746,732.697 L399.988,732.207 L400.996,730.392 L401.284,729.928 L402.466,728.221 L402.798,727.788 L404.142,726.205 L404.515,725.806 L406.007,724.363 L406.417,724.003 L408.043,722.712 L408.487,722.394 L410.347,721.195 L410.580,721.052 L476.205,683.164 L477.417,682.354 L478.512,681.394 L479.472,680.299 L480.282,679.088 L480.926,677.781 L481.394,676.402 L481.678,674.973 L481.774,673.520 L481.774,583.642 L481.678,582.189 L481.394,580.760 L480.926,579.380 L480.282,578.074 L479.472,576.863 L478.512,575.768 L477.417,574.807 L476.205,573.998 L474.899,573.354 L473.520,572.885 L472.091,572.601 L470.637,572.506 L469.184,572.601 L467.755,572.885 L466.376,573.354 L465.069,573.998 L387.233,618.937 L386.022,619.746 L384.927,620.706 L383.966,621.802 L383.157,623.013 L382.513,624.319 L382.045,625.699 L381.760,627.127 L381.665,628.581 L381.665,704.358 L381.658,704.631 L381.550,706.842 L381.496,707.385 L381.192,709.439 L381.085,709.974 L380.581,711.988 L380.422,712.511 L379.723,714.465 L379.514,714.970 L378.626,716.847 L378.369,717.328 L377.301,719.109 L376.998,719.563 L375.761,721.231 L375.415,721.653 L374.021,723.191 L373.635,723.577 L372.096,724.971 L371.674,725.318 L370.007,726.554 L369.553,726.858 L367.772,727.925 L367.290,728.183 L365.414,729.070 L364.909,729.279 L362.954,729.979 L362.432,730.137 L360.418,730.642 L359.882,730.748 L357.829,731.053 L357.285,731.106 L355.212,731.208 L354.666,731.208 L352.592,731.106 L352.049,731.053 L349.995,730.748 L349.459,730.642 L347.445,730.137 L346.923,729.979 L344.968,729.279 L344.464,729.070 L342.587,728.183 L342.105,727.925 L340.325,726.858 L339.871,726.554 L338.203,725.318 L337.781,724.971 L336.243,723.577 L335.856,723.191 L334.462,721.653 L334.116,721.231 L332.879,719.563 L332.576,719.109 L331.508,717.328 L331.251,716.847 L330.363,714.970 L330.154,714.465 L329.455,712.511 L329.296,711.988 L328.792,709.974 L328.685,709.439 L328.381,707.385 L328.327,706.842 L328.219,704.631 L328.212,704.358 L328.212,672.301 L328.117,670.847 L327.833,669.419 L327.364,668.039 L326.720,666.733 L325.911,665.522 L324.950,664.426 L323.855,663.466 L322.644,662.657 L321.338,662.012 L319.958,661.544 L318.529,661.260 L317.076,661.165 L315.622,661.260 L314.194,661.544 L312.814,662.012 L311.508,662.657 L251.685,697.195 L251.445,697.326 L249.172,698.494 L248.674,698.719 L246.424,699.609 L245.907,699.784 L243.580,700.449 L243.048,700.573 L240.668,701.006 L240.127,701.077 L237.715,701.275 L237.169,701.293 L234.750,701.253 L234.205,701.217 L231.801,700.941 L231.263,700.852 L228.898,700.341 L228.370,700.200 L226.067,699.460 L225.556,699.267 L223.336,698.305 L222.846,698.063 L220.731,696.888 L220.267,696.600 L218.278,695.223 L217.844,694.890 L216.000,693.325 L215.601,692.952 L213.918,691.213 L213.558,690.802 L212.054,688.907 L211.736,688.463 L210.425,686.430 L210.152,685.957 L209.046,683.805 L208.821,683.307 L207.932,681.057 L207.756,680.540 L207.092,678.213 L206.968,677.682 L206.535,675.301 L206.463,674.760 L206.266,672.348 L206.248,671.802 L206.287,669.383 L206.323,668.838 L206.600,666.435 L206.689,665.896 L207.199,663.531 L207.341,663.003 L208.081,660.700 L208.273,660.189 L209.236,657.969 L209.477,657.479 L210.652,655.364 L210.941,654.900 L212.318,652.911 L212.650,652.478 L214.216,650.633 L214.589,650.234 L216.328,648.551 L216.738,648.191 L218.633,646.687 L219.077,646.369 L221.226,644.984 L221.459,644.842 L281.281,610.303 L282.493,609.494 L283.588,608.533 L284.548,607.438 L285.357,606.227 L286.002,604.920 L286.470,603.541 L286.754,602.112 L286.849,600.659 L286.754,599.205 L286.470,597.777 L286.002,596.397 L285.357,595.091 L284.548,593.880 L283.588,592.784 L282.493,591.824 L281.281,591.015 L253.519,574.986 L253.286,574.844 L251.426,573.644 L250.982,573.326 L249.356,572.036 L248.945,571.676 L247.453,570.232 L247.080,569.833 L245.737,568.250 L245.405,567.817 L244.223,566.110 L243.935,565.646 L242.926,563.832 L242.685,563.342 L241.859,561.437 L241.667,560.926 L241.031,558.949 L240.890,558.422 L240.452,556.393 L240.363,555.854 L240.126,553.791 L240.090,553.246 L240.056,551.171 L240.074,550.625 L240.243,548.556 L240.315,548.014 L240.686,545.972 L240.810,545.440 L241.380,543.444 L241.556,542.926 L242.319,540.996 L242.544,540.498 L243.493,538.652 L243.766,538.179 L244.891,536.434 L245.209,535.990 L246.500,534.364 L246.860,533.953 L248.304,532.461 L248.702,532.088 L250.285,530.745 L250.718,530.412 L252.426,529.231 L252.889,528.943 L254.704,527.934 L255.194,527.693 L257.098,526.867 L257.610,526.675 L259.586,526.039 L260.114,525.898 L262.143,525.460 L262.682,525.371 L264.744,525.134 L265.289,525.098 L267.365,525.064 L267.911,525.082 L269.980,525.251 L270.521,525.323 L272.564,525.694 L273.096,525.818 L275.092,526.388 L275.609,526.564 L277.540,527.327 L278.037,527.552 L280.005,528.563 L280.245,528.694 L345.871,566.583 L347.177,567.227 L348.556,567.695 L349.985,567.980 L351.439,568.075 L352.892,567.980 L354.321,567.695 L355.700,567.227 L357.007,566.583 L434.843,521.644 L436.054,520.835 L437.149,519.874 L438.110,518.779 L438.919,517.568 L439.563,516.262 L440.032,514.882 L440.316,513.454 L440.411,512.000 L440.316,510.546 L440.032,509.118 L439.563,507.738 L438.919,506.432 L438.110,505.221 L437.149,504.126 L436.054,503.165 L434.843,502.356 L357.007,457.417 L355.700,456.773 L354.321,456.305 L352.892,456.020 L351.439,455.925 L349.985,456.020 L348.556,456.305 L347.177,456.773 L345.871,457.417 L280.245,495.306 L280.005,495.437 L278.037,496.448 L277.540,496.673 L275.609,497.436 L275.092,497.612 L273.096,498.182 L272.564,498.306 L270.521,498.677 L269.980,498.749 L267.911,498.918 L267.365,498.936 L265.289,498.902 L264.744,498.866 L262.682,498.629 L262.143,498.540 L260.114,498.102 L259.586,497.961 L257.610,497.325 L257.098,497.133 L255.194,496.307 L254.704,496.066 L252.889,495.057 L252.426,494.769 L250.718,493.588 L250.285,493.255 L248.702,491.912 L248.304,491.539 L246.860,490.047 L246.500,489.636 L245.209,488.010 L244.891,487.566 L243.766,485.821 L243.493,485.348 L242.544,483.502 L242.319,483.004 L241.556,481.074 L241.380,480.556 L240.810,478.560 L240.686,478.028 L240.315,475.986 L240.243,475.444 L240.074,473.375 L240.056,472.829 L240.090,470.754 L240.126,470.209 L240.363,468.146 L240.452,467.607 L240.890,465.578 L241.031,465.051 L241.667,463.074 L241.859,462.563 L242.685,460.658 L242.926,460.168 L243.935,458.354 L244.223,457.890 L245.405,456.183 L245.737,455.750 L247.080,454.167 L247.453,453.768 L248.945,452.324 L249.356,451.964 L250.982,450.674 L251.426,450.356 L253.286,449.156 L253.519,449.014 L281.281,432.985 L282.493,432.176 L283.588,431.216 L284.548,430.120 L285.357,428.909 L286.002,427.603 L286.470,426.223 L286.754,424.795 L286.849,423.341 L286.754,421.888 L286.470,420.459 L286.002,419.080 L285.357,417.773 L284.548,416.562 L283.588,415.467 L282.493,414.506 L281.281,413.697 L221.459,379.158 L221.226,379.016 L219.077,377.631 L218.633,377.313 L216.738,375.809 L216.328,375.449 L214.589,373.766 L214.216,373.367 L212.650,371.522 L212.318,371.089 L210.941,369.100 L210.652,368.636 L209.477,366.521 L209.236,366.031 L208.273,363.811 L208.081,363.300 L207.341,360.997 L207.199,360.469 L206.689,358.104 L206.600,357.565 L206.323,355.162 L206.287,354.617 L206.248,352.198 L206.266,351.652 L206.463,349.240 L206.535,348.699 L206.968,346.318 L207.092,345.787 L207.756,343.460 L207.932,342.943 L208.821,340.693 L209.046,340.195 L210.152,338.043 L210.425,337.570 L211.736,335.537 L212.054,335.093 L213.558,333.198 L213.918,332.787 L215.601,331.048 L216.000,330.675 L217.844,329.110 L218.278,328.777 L220.267,327.400 L220.731,327.112 L222.846,325.937 L223.336,325.695 L225.556,324.733 L226.067,324.540 L228.370,323.800 L228.898,323.659 L231.263,323.148 L231.801,323.059 L234.205,322.783 L234.750,322.747 L237.169,322.707 L237.715,322.725 L240.127,322.923 L240.668,322.994 L243.048,323.427 L243.580,323.551 L245.907,324.216 L246.424,324.391 L248.674,325.281 L249.172,325.506 L251.445,326.674 L251.685,326.805 L311.508,361.343 L312.814,361.988 L314.194,362.456 L315.622,362.740 L317.076,362.835 L318.529,362.740 L319.958,362.456 L321.338,361.988 L322.644,361.343 L323.855,360.534 L324.950,359.574 L325.911,358.478 L326.720,357.267 L327.364,355.961 L327.833,354.581 L328.117,353.153 L328.212,351.699 L328.212,319.642 L328.219,319.369 L328.327,317.158 L328.381,316.615 L328.685,314.561 L328.792,314.026 L329.296,312.012 L329.455,311.489 L330.154,309.535 L330.363,309.030 L331.251,307.153 L331.508,306.672 L332.576,304.891 L332.879,304.437 L334.116,302.769 L334.462,302.347 L335.856,300.809 L336.243,300.423 L337.781,299.029 L338.203,298.682 L339.871,297.446 L340.325,297.142 L342.105,296.075 L342.587,295.817 L344.464,294.930 L344.968,294.721 L346.923,294.021 L347.445,293.863 L349.459,293.358 L349.995,293.252 L352.049,292.947 L352.592,292.894 L354.666,292.792 L355.212,292.792 L357.285,292.894 L357.829,292.947 L359.882,293.252 L360.418,293.358 L362.432,293.863 L362.954,294.021 L364.909,294.721 L365.414,294.930 L367.290,295.817 L367.772,296.075 L369.553,297.142 L370.007,297.446 L371.674,298.682 L372.096,299.029 L373.635,300.423 L374.021,300.809 L375.415,302.347 L375.761,302.769 L376.998,304.437 L377.301,304.891 L378.369,306.672 L378.626,307.153 L379.514,309.030 L379.723,309.535 L380.422,311.489 L380.581,312.012 L381.085,314.026 L381.192,314.561 L381.496,316.615 L381.550,317.158 L381.658,319.369 L381.665,319.642 L381.665,395.419 L381.760,396.873 L382.045,398.301 L382.513,399.681 L383.157,400.987 L383.966,402.198 L384.927,403.294 L386.022,404.254 L387.233,405.063 L465.069,450.002 L466.376,450.646 L467.755,451.115 L469.184,451.399 L470.637,451.494 L472.091,451.399 L473.520,451.115 L474.899,450.646 L476.205,450.002 L477.417,449.193 L478.512,448.232 L479.472,447.137 L480.282,445.926 L480.926,444.620 L481.394,443.240 L481.678,441.811 L481.774,440.358 L481.774,350.480 L481.678,349.027 L481.394,347.598 L480.926,346.219 L480.282,344.912 L479.472,343.701 L478.512,342.606 L477.417,341.646 L476.205,340.836 L410.580,302.948 L410.347,302.805 L408.487,301.606 L408.043,301.288 L406.417,299.997 L406.007,299.637 L404.515,298.194 L404.142,297.795 L402.798,296.212 L402.466,295.779 L401.284,294.072 L400.996,293.608 L399.988,291.793 L399.746,291.303 L398.920,289.399 L398.728,288.888 L398.093,286.911 L397.952,286.383 L397.513,284.354 L397.424,283.815 L397.187,281.753 L397.151,281.208 L397.117,279.132 L397.135,278.586 L397.305,276.517 L397.376,275.976 L397.748,273.933 L397.872,273.401 L398.442,271.405 L398.617,270.888 L399.380,268.957 L399.606,268.460 L400.554,266.613 L400.827,266.140 L401.952,264.395 L402.271,263.952 L403.561,262.325 L403.921,261.915 L405.365,260.423 L405.764,260.050 L407.347,258.707 L407.780,258.374 L409.487,257.193 L409.951,256.904 L411.765,255.896 L412.255,255.654 L414.160,254.829 L414.671,254.636 L416.648,254.001 L417.175,253.860 L419.204,253.421 L419.743,253.332 L421.806,253.095 L422.351,253.060 L424.426,253.026 L424.972,253.043 L427.041,253.213 L427.583,253.284 L429.625,253.656 L430.157,253.780 L432.153,254.350 L432.670,254.526 L434.601,255.289 L435.099,255.514 L437.067,256.525 L437.307,256.656 L465.069,272.685 L466.376,273.329 L467.755,273.797 L469.184,274.081 L470.637,274.176 L472.091,274.081 L473.520,273.797 L474.899,273.329 L476.205,272.685 L477.417,271.875 L478.512,270.915 L479.472,269.820 L480.282,268.608 L480.926,267.302 L481.394,265.923 L481.678,264.494 L481.774,263.040 L481.774,193.963 L481.780,193.690 L481.906,191.137 L481.959,190.593 L482.314,188.200 L482.421,187.664 L483.009,185.317 L483.167,184.795 L483.982,182.517 L484.191,182.012 L485.226,179.825 L485.483,179.343 L486.727,177.268 L487.030,176.814 L488.472,174.871 L488.818,174.448 L490.443,172.656 L490.829,172.270 L492.622,170.645 L493.044,170.298 L494.987,168.857 L495.442,168.554 L497.517,167.310 L497.998,167.052 L500.186,166.018 L500.690,165.809 L502.968,164.994 L503.491,164.835 L505.838,164.247 L506.374,164.141 L508.767,163.786 L509.310,163.732 L511.727,163.613 L512.273,163.613 L514.690,163.732 L515.233,163.786 L517.626,164.141 L518.162,164.247 L520.509,164.835 L521.032,164.994 L523.310,165.809 L523.814,166.018 L526.002,167.052 L526.483,167.310 L528.558,168.554 L529.013,168.857 L530.956,170.298 L531.378,170.645 L533.171,172.270 L533.557,172.656 L535.182,174.448 L535.528,174.871 L536.970,176.814 L537.273,177.268 L538.517,179.343 L538.774,179.825 L539.809,182.012 L540.018,182.517 L540.833,184.795 L540.991,185.317 L541.579,187.664 L541.686,188.200 L542.041,190.593 L542.094,191.137 L542.220,193.690 L542.226,193.963 L542.226,263.040 L542.322,264.494 L542.606,265.923 L543.074,267.302 L543.718,268.608 L544.528,269.820 L545.488,270.915 L546.583,271.875 L547.795,272.685 L549.101,273.329 L550.480,273.797 L551.909,274.081 L553.363,274.176 L554.816,274.081 L556.245,273.797 L557.624,273.329 L558.931,272.685 L586.693,256.656 L586.933,256.525 L588.901,255.514 L589.399,255.289 L591.330,254.526 L591.847,254.350 L593.843,253.780 L594.375,253.656 L596.417,253.284 L596.959,253.213 L599.028,253.043 L599.574,253.026 L601.649,253.060 L602.194,253.095 L604.257,253.332 L604.796,253.421 L606.825,253.860 L607.352,254.001 L609.329,254.636 L609.840,254.829 L611.745,255.654 L612.235,255.896 L614.049,256.904 L614.513,257.193 L616.220,258.374 L616.653,258.707 L618.236,260.050 L618.635,260.423 L620.079,261.915 L620.439,262.325 L621.729,263.952 L622.048,264.395 L623.173,266.140 L623.446,266.613 L624.394,268.460 L624.620,268.957 L625.383,270.888 L625.558,271.405 L626.128,273.401 L626.252,273.933 L626.624,275.976 L626.695,276.517 L626.865,278.586 L626.883,279.132 L626.849,281.208 L626.813,281.753 L626.576,283.815 L626.487,284.354 L626.048,286.383 L625.907,286.911 L625.272,288.888 L625.080,289.399 L624.254,291.303 L624.012,291.793 L623.004,293.608 L622.716,294.072 L621.534,295.779 L621.202,296.212 L619.858,297.795 L619.485,298.194 L617.993,299.637 L617.583,299.997 L615.957,301.288 L615.513,301.606 L613.653,302.805 L613.420,302.948 L547.795,340.836 L546.583,341.646 L545.488,342.606 L544.528,343.701 L543.718,344.912 L543.074,346.219 L542.606,347.598 L542.322,349.027 L542.226,350.480 L542.226,440.358 L542.322,441.811 L542.606,443.240 L543.074,444.620 L543.718,445.926 L544.528,447.137 L545.488,448.232 L546.583,449.193 L547.795,450.002 L549.101,450.646 L550.480,451.115 L551.909,451.399 L553.363,451.494 L554.816,451.399 L556.245,451.115 L557.624,450.646 L558.931,450.002 L636.767,405.063 L637.978,404.254 L639.073,403.294 L640.034,402.198 L640.843,400.987 L641.487,399.681 L641.955,398.301 L642.240,396.873 L642.335,395.419 L642.335,319.642 L642.342,319.369 L642.450,317.158 L642.504,316.615 L642.808,314.561 L642.915,314.026 L643.419,312.012 L643.578,311.489 L644.277,309.535 L644.486,309.030 L645.374,307.153 L645.631,306.672 L646.699,304.891 L647.002,304.437 L648.239,302.769 L648.585,302.347 L649.979,300.809 L650.365,300.423 L651.904,299.029 L652.326,298.682 L653.993,297.446 L654.447,297.142 L656.228,296.075 L656.710,295.817 L658.586,294.930 L659.091,294.721 L661.046,294.021 L661.568,293.863 L663.582,293.358 L664.118,293.252 L666.171,292.947 L666.715,292.894 L668.788,292.792 L669.334,292.792 L671.408,292.894 L671.951,292.947 L674.005,293.252 L674.541,293.358 L676.555,293.863 L677.077,294.021 L679.032,294.721 L679.536,294.930 L681.413,295.817 L681.895,296.075 L683.675,297.142 L684.129,297.446 L685.797,298.682 L686.219,299.029 L687.757,300.423 L688.144,300.809 L689.538,302.347 L689.884,302.769 L691.121,304.437 L691.424,304.891 L692.492,306.672 L692.749,307.153 L693.637,309.030 L693.846,309.535 L694.545,311.489 L694.704,312.012 L695.208,314.026 L695.315,314.561 L695.619,316.615 L695.673,317.158 L695.781,319.369 L695.788,319.642 L695.788,351.699 L695.883,353.153 L696.167,354.581 L696.636,355.961 L697.280,357.267 L698.089,358.478 L699.050,359.574 L700.145,360.534 L701.356,361.343 L702.662,361.988 L704.042,362.456 L705.471,362.740 L706.924,362.835 L708.378,362.740 L709.806,362.456 L711.186,361.988 L712.492,361.343 L772.315,326.805 L772.555,326.674 L774.828,325.506 L775.326,325.281 L777.576,324.391 L778.093,324.216 L780.420,323.551 L780.952,323.427 L783.332,322.994 L783.873,322.923 L786.285,322.725 L786.831,322.707 L789.250,322.747 L789.795,322.783 L792.199,323.059 L792.737,323.148 L795.102,323.659 L795.630,323.800 L797.933,324.540 L798.444,324.733 L800.664,325.695 L801.154,325.937 L803.269,327.112 L803.733,327.400 L805.722,328.777 L806.156,329.110 L808.000,330.675 L808.399,331.048 L810.082,332.787 L810.442,333.198 L811.946,335.093 L812.264,335.537 L813.575,337.570 L813.848,338.043 L814.954,340.195 L815.179,340.693 L816.068,342.943 L816.244,343.460 L816.908,345.787 L817.032,346.318 L817.465,348.699 L817.537,349.240 L817.734,351.652 L817.752,352.198 L817.713,354.617 L817.677,355.162 L817.400,357.565 L817.311,358.104 L816.801,360.469 L816.659,360.997 L815.919,363.300 L815.727,363.811 L814.764,366.031 L814.523,366.521 L813.348,368.636 L813.059,369.100 L811.682,371.089 L811.350,371.522 L809.784,373.367 L809.411,373.766 L807.672,375.449 L807.262,375.809 L805.367,377.313 L804.923,377.631 L802.774,379.016 L802.541,379.158 L742.719,413.697 L741.507,414.506 L740.412,415.467 L739.452,416.562 L738.643,417.773 L737.998,419.080 L737.530,420.459 L737.246,421.888 L737.151,423.341 L737.246,424.795 L737.530,426.223 L737.998,427.603 L738.643,428.909 L739.452,430.120 L740.412,431.216 L741.507,432.176 L742.719,432.985 L770.481,449.014 L770.714,449.156 L772.574,450.356 L773.018,450.674 L774.644,451.964 L775.055,452.324 L776.547,453.768 L776.920,454.167 L778.263,455.750 L778.595,456.183 L779.777,457.890 L780.065,458.354 L781.074,460.168 L781.315,460.658 L782.141,462.563 L782.333,463.074 L782.969,465.051 L783.110,465.578 L783.548,467.607 L783.637,468.146 L783.874,470.209 L783.910,470.754 L783.944,472.829 L783.926,473.375 L783.757,475.444 L783.685,475.986 L783.314,478.028 L783.190,478.560 L782.620,480.556 L782.444,481.074 L781.681,483.004 L781.456,483.502 L780.507,485.348 L780.234,485.821 L779.109,487.566 L778.791,488.010 L777.500,489.636 L777.140,490.047 L775.696,491.539 L775.298,491.912 L773.715,493.255 L773.282,493.588 L771.574,494.769 L771.111,495.057 L769.296,496.066 L768.806,496.307 L766.902,497.133 L766.390,497.325 L764.414,497.961 L763.886,498.102 L761.857,498.540 L761.318,498.629 L759.256,498.866 L758.711,498.902 L756.635,498.936 L756.089,498.918 L754.020,498.749 L753.479,498.677 L751.436,498.306 L750.904,498.182 L748.908,497.612 L748.391,497.436 L746.460,496.673 L745.963,496.448 L743.995,495.437 L743.755,495.306 L678.129,457.417 L676.823,456.773 L675.444,456.305 L674.015,456.020 L672.561,455.925 L671.108,456.020 L669.679,456.305 L668.300,456.773 L666.993,457.417 L589.157,502.356 L587.946,503.165 L586.851,504.126 L585.890,505.221 L585.081,506.432 L584.437,507.738 L583.968,509.118 L583.684,510.546 L583.589,512.000 L583.684,513.454 L583.968,514.882 L584.437,516.262 L585.081,517.568 L585.890,518.779 L586.851,519.874 L587.946,520.835 L589.157,521.644 L666.993,566.583 L668.300,567.227 L669.679,567.695 L671.108,567.980 L672.561,568.075 L674.015,567.980 L675.444,567.695 L676.823,567.227 L678.129,566.583 L743.755,528.694 L743.995,528.563 L745.963,527.552 L746.460,527.327 L748.391,526.564 L748.908,526.388 L750.904,525.818 L751.436,525.694 L753.479,525.323 L754.020,525.251 L756.089,525.082 L756.635,525.064 L758.711,525.098 L759.256,525.134 L761.318,525.371 L761.857,525.460 L763.886,525.898 L764.414,526.039 L766.390,526.675 L766.902,526.867 L768.806,527.693 L769.296,527.934 L771.111,528.943 L771.574,529.231 L773.282,530.412 L773.715,530.745 L775.298,532.088 L775.696,532.461 L777.140,533.953 L777.500,534.364 L778.791,535.990 L779.109,536.434 L780.234,538.179 L780.507,538.652 L781.456,540.498 L781.681,540.996 L782.444,542.926 L782.620,543.444 L783.190,545.440 L783.314,545.972 L783.685,548.014 L783.757,548.556 L783.926,550.625 L783.944,551.171 L783.910,553.246 L783.874,553.791 L783.637,555.854 L783.548,556.393 L783.110,558.422 L782.969,558.949 L782.333,560.926 L782.141,561.437 L781.315,563.342 L781.074,563.832 L780.065,565.646 L779.777,566.110 L778.595,567.817 L778.263,568.250 L776.920,569.833 L776.547,570.232 L775.055,571.676 L774.644,572.036 L773.018,573.326 L772.574,573.644 L770.714,574.844 L770.481,574.986 L742.719,591.015 L741.507,591.824 L740.412,592.784 L739.452,593.880 L738.643,595.091 L737.998,596.397 L737.530,597.777 L737.246,599.205 L737.151,600.659 L737.246,602.112 L737.530,603.541 L737.998,604.920 L738.643,606.227 L739.452,607.438 L740.412,608.533 L741.507,609.494 L742.719,610.303 L802.541,644.842 L802.774,644.984 L804.923,646.369 L805.367,646.687 L807.262,648.191 L807.672,648.551 L809.411,650.234 L809.784,650.633 L811.350,652.478 L811.682,652.911 L813.059,654.900 L813.348,655.364 L814.523,657.479 L814.764,657.969 L815.727,660.189 L815.919,660.700 L816.659,663.003 L816.801,663.531 L817.311,665.896 L817.400,666.435 L817.677,668.838 L817.713,669.383 L817.752,671.802 L817.734,672.348 L817.537,674.760 L817.465,675.301 L817.032,677.682 L816.908,678.213 L816.244,680.540 L816.068,681.057 L815.179,683.307 L814.954,683.805 L813.848,685.957 L813.575,686.430 L812.264,688.463 L811.946,688.907 L810.442,690.802 L810.082,691.213 L808.399,692.952 L808.000,693.325 L806.156,694.890 L805.722,695.223 L803.733,696.600 L803.269,696.888 L801.154,698.063 L800.664,698.305 L798.444,699.267 L797.933,699.460 L795.630,700.200 L795.102,700.341 L792.737,700.852 L792.199,700.941 L789.795,701.217 L789.250,701.253 L786.831,701.293 L786.285,701.275 L783.873,701.077 L783.332,701.006 L780.952,700.573 L780.420,700.449 L778.093,699.784 L777.576,699.609 L775.326,698.719 L774.828,698.494 L772.555,697.326 L772.315,697.195 L712.492,662.657 L711.186,662.012 L709.806,661.544 L708.378,661.260 L706.924,661.165 L705.471,661.260 L704.042,661.544 L702.662,662.012 L701.356,662.657 L700.145,663.466 L699.050,664.426 L698.089,665.522 L697.280,666.733 L696.636,668.039 L696.167,669.419 L695.883,670.847 L695.788,672.301 L695.788,704.358 L695.781,704.631 L695.673,706.842 L695.619,707.385 L695.315,709.439 L695.208,709.974 L694.704,711.988 L694.545,712.511 L693.846,714.465 L693.637,714.970 L692.749,716.847 L692.492,717.328 L691.424,719.109 L691.121,719.563 L689.884,721.231 L689.538,721.653 L688.144,723.191 L687.757,723.577 L686.219,724.971 L685.797,725.318 L684.129,726.554 L683.675,726.858 L681.895,727.925 L681.413,728.183 L679.536,729.070 L679.032,729.279 L677.077,729.979 L676.555,730.137 L674.541,730.642 L674.005,730.748 L671.951,731.053 L671.408,731.106 L669.334,731.208 L668.788,731.208 L666.715,731.106 L666.171,731.053 L664.118,730.748 L663.582,730.642 L661.568,730.137 L661.046,729.979 L659.091,729.279 L658.586,729.070 L656.710,728.183 L656.228,727.925 L654.447,726.858 L653.993,726.554 L652.326,725.318 L651.904,724.971 L650.365,723.577 L649.979,723.191 L648.585,721.653 L648.239,721.231 L647.002,719.563 L646.699,719.109 L645.631,717.328 L645.374,716.847 L644.486,714.970 L644.277,714.465 L643.578,712.511 L643.419,711.988 L642.915,709.974 L642.808,709.439 L642.504,707.385 L642.450,706.842 L642.342,704.631 L642.335,704.358 L642.335,628.581 L642.240,627.127 L641.955,625.699 L641.487,624.319 L640.843,623.013 L640.034,621.802 L639.073,620.706 L637.978,619.746 L636.767,618.937 L558.931,573.998 L557.624,573.354 L556.245,572.885 L554.816,572.601 L553.363,572.506 L551.909,572.601 L550.480,572.885 L549.101,573.354 L547.795,573.998 L546.583,574.807 L545.488,575.768 L544.528,576.863 L543.718,578.074 L543.074,579.380 L542.606,580.760 L542.322,582.189 L542.226,583.642 L542.226,673.520 L542.322,674.973 L542.606,676.402 L543.074,677.781 L543.718,679.088 L544.528,680.299 L545.488,681.394 L546.583,682.354 L547.795,683.164 L613.420,721.052 L613.653,721.195 L615.513,722.394 L615.957,722.712 L617.583,724.003 L617.993,724.363 L619.485,725.806 L619.858,726.205 L621.202,727.788 L621.534,728.221 L622.716,729.928 L623.004,730.392 L624.012,732.207 L624.254,732.697 L625.080,734.601 L625.272,735.112 L625.907,737.089 L626.048,737.617 L626.487,739.646 L626.576,740.185 L626.813,742.247 L626.849,742.792 L626.883,744.868 L626.865,745.414 L626.695,747.483 L626.624,748.024 L626.252,750.067 L626.128,750.599 L625.558,752.595 L625.383,753.112 L624.620,755.043 L624.394,755.540 L623.446,757.387 L623.173,757.860 L622.048,759.605 L621.729,760.048 L620.439,761.675 L620.079,762.085 L618.635,763.577 L618.236,763.950 L616.653,765.293 L616.220,765.626 L614.513,766.807 L614.049,767.096 L612.235,768.104 L611.745,768.346 L609.840,769.171 L609.329,769.364 L607.352,769.999 L606.825,770.140 L604.796,770.579 L604.257,770.668 L602.194,770.905 L601.649,770.940 L599.574,770.974 L599.028,770.957 L596.959,770.787 L596.417,770.716 L594.375,770.344 L593.843,770.220 L591.847,769.650 L591.330,769.474 L589.399,768.711 L588.901,768.486 L586.933,767.475 L586.693,767.344 L558.931,751.315 L557.624,750.671 L556.245,750.203 L554.816,749.919 L553.363,749.824 L551.909,749.919 L550.480,750.203 L549.101,750.671 L547.795,751.315 L546.583,752.125 L545.488,753.085 L544.528,754.180 L543.718,755.392 L543.074,756.698 L542.606,758.077 L542.322,759.506 L542.226,760.960 L542.226,830.037 L542.220,830.310 L542.094,832.863 L542.041,833.407 L541.686,835.800 L541.579,836.336 L540.991,838.683 L540.833,839.205 L540.018,841.483 L539.809,841.988 L538.774,844.175 L538.517,844.657 L537.273,846.732 L536.970,847.186 L535.528,849.129 L535.182,849.552 L533.557,851.344 L533.171,851.730 L531.378,853.355 L530.956,853.702 L529.013,855.143 L528.558,855.446 L526.483,856.690 L526.002,856.948 L523.814,857.982 L523.310,858.191 L521.032,859.006 L520.509,859.165 L518.162,859.753 L517.626,859.859 L515.233,860.214 L514.690,860.268 L512.273,860.387 L511.727,860.387 L509.310,860.268 L508.767,860.214 L506.374,859.859 L505.838,859.753 L503.491,859.165 L502.968,859.006 L500.690,858.191 L500.186,857.982 L497.998,856.948 L497.517,856.690 L495.442,855.446 L494.987,855.143 L493.044,853.702 L492.622,853.355 L490.829,851.730 L490.443,851.344 L488.818,849.552 L488.472,849.129 L487.030,847.186 L486.727,846.732 L485.483,844.657 L485.226,844.175 L484.191,841.988 L483.982,841.483 L483.167,839.205 L483.009,838.683 L482.421,836.336 L482.314,835.800 L481.959,833.407 L481.906,832.863 L481.780,830.310 L481.774,830.037 L481.774,760.960 L481.678,759.506 L481.394,758.077 L480.926,756.698 L480.282,755.392 L479.472,754.180 L478.512,753.085 L477.417,752.125 L476.205,751.315 L474.899,750.671 L473.520,750.203 L472.091,749.919 L470.637,749.824 L469.184,749.919 L467.755,750.203 L466.376,750.671 L465.069,751.315 L437.307,767.344 L437.067,767.475 L435.099,768.486 L434.601,768.711 L432.670,769.474 L432.153,769.650 L430.157,770.220 L429.625,770.344 L427.583,770.716Z"/></svg>
\ No newline at end of file
crates/snowbound/assets/icon/sources/Snowbound-Tahoe.icon/Assets/Tabs.svg created+1
......@@ -0,0 +1 @@
1<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024"><rect x="866" y="220" width="66" height="184" rx="33" fill="#48b880"/><rect x="866" y="420" width="66" height="184" rx="33" fill="#3bb9da"/><rect x="866" y="620" width="66" height="184" rx="33" fill="#9781cf"/></svg>
\ No newline at end of file
crates/snowbound/assets/icon/sources/Snowbound-Tahoe.icon/icon.json created+78
......@@ -0,0 +1,78 @@
1{
2 "fill": {
3 "linear-gradient": [
4 "extended-srgb:0.86,0.87,0.88,1",
5 "extended-srgb:0.73,0.76,0.78,1"
6 ],
7 "orientation": {
8 "start": {
9 "x": 0.5,
10 "y": 0
11 },
12 "stop": {
13 "x": 0.5,
14 "y": 1
15 }
16 }
17 },
18 "groups": [
19 {
20 "layers": [
21 {
22 "fill-specializations": [
23 {
24 "appearance": "dark",
25 "value": {
26 "solid": "extended-srgb:0.38,0.75,1,1"
27 }
28 }
29 ],
30 "glass": true,
31 "hidden": false,
32 "image-name": "Snowflake.svg",
33 "name": "Snowflake",
34 "opacity": 0.49,
35 "position": {
36 "scale": 1.1,
37 "translation-in-points": [
38 -48,
39 0
40 ]
41 }
42 }
43 ],
44 "name": "Snowflake",
45 "shadow": {
46 "kind": "neutral",
47 "opacity": 0.34
48 },
49 "translucency": {
50 "enabled": true,
51 "value": 0.06
52 }
53 },
54 {
55 "layers": [
56 {
57 "name": "Tabs",
58 "image-name": "Tabs.svg",
59 "glass": true,
60 "opacity": 0.72
61 }
62 ],
63 "name": "Index tabs",
64 "shadow": {
65 "kind": "neutral",
66 "opacity": 0.22
67 },
68 "specular": true,
69 "translucency": {
70 "enabled": true,
71 "value": 0.12
72 }
73 }
74 ],
75 "supported-platforms": {
76 "squares": "shared"
77 }
78}
crates/snowbound/assets/icon/sources/finish.lua created+21
......@@ -0,0 +1,21 @@
1local fu = Fusion()
2local root = assert(arg[1], 'Pass the absolute design directory')
3local path = root .. '/sources/Snowbound-Finishing.comp'
4local comp
5for _, c in pairs(fu:GetCompList()) do
6 if c:GetAttrs().COMPS_FileName == path then comp = c end
7end
8comp = comp or fu:LoadComp(path)
9for name,file in pairs({Notebook_2010='SnowLeopard',Notebook_15='Sequoia'}) do
10 comp:FindTool(name).Clip = root .. '/renders/' .. file .. '.png'
11end
12print('Render',comp:Render({Start=0,End=0,Wait=true}))
13for name,file in pairs({Notebook_2010='SnowLeopard',Notebook_15='Sequoia'}) do
14 comp:FindTool(name).Clip = 'Comp:/../renders/' .. file .. '.png'
15end
16print('Save',comp:Save())
17
18for _,name in ipairs({'SnowLeopard','Sequoia'}) do
19 local base = root .. '/Snowbound-' .. name
20 assert(os.rename(base .. '0000.png', base .. '.png'))
21end
crates/snowbound/assets/icon/sources/package_icons.py created+43
......@@ -0,0 +1,43 @@
1from io import BytesIO
2from pathlib import Path
3import subprocess
4import tempfile
5from PIL import Image, ImageCms
6
7root = Path(__file__).resolve().parent.parent
8exports = root / 'exports'
9srgb = ImageCms.createProfile('sRGB')
10profile = ImageCms.ImageCmsProfile(srgb).tobytes()
11board = Image.new('RGBA', (1800, 1100), '#edf0f2')
12board.paste('#25343e', (0, 550, 1800, 1100))
13for col, name in enumerate(('SnowLeopard', 'Sequoia', 'Tahoe')):
14 for dark in (False, True):
15 suffix = '-Dark' if name == 'Tahoe' and dark else ''
16 im = Image.open(exports / f'Snowbound-{name}{suffix}.png')
17 art = im.convert('RGBA')
18 if im.info.get('icc_profile'):
19 art = ImageCms.profileToProfile(art, ImageCms.ImageCmsProfile(BytesIO(im.info['icc_profile'])), srgb, outputMode='RGBA')
20 if name == 'Tahoe':
21 tile = art.resize((824, 824), Image.Resampling.LANCZOS)
22 art = Image.new('RGBA', (1024, 1024))
23 art.alpha_composite(tile, (100, 100))
24 x, y = col * 600, 550 if dark else 0
25 board.alpha_composite(art.resize((480, 480), Image.Resampling.LANCZOS), (x + 60, y))
26 for size, center in ((64, 180), (32, 310), (16, 420)):
27 board.alpha_composite(art.resize((size, size), Image.Resampling.LANCZOS), (x + center - size // 2, y + 500 - size // 2))
28 if not dark:
29 with tempfile.TemporaryDirectory() as temp:
30 folder = Path(temp) / f'Snowbound-{name}.iconset'
31 folder.mkdir()
32 pixels = {}
33 for size in (16, 32, 128, 256, 512):
34 for scale in (1, 2):
35 n = size * scale
36 dest = folder / (f'icon_{size}x{size}' + ('@2x' if scale == 2 else '') + '.png')
37 if n in pixels:
38 dest.symlink_to(pixels[n].name)
39 else:
40 art.resize((n, n), Image.Resampling.LANCZOS).save(dest, icc_profile=profile)
41 pixels[n] = dest
42 subprocess.run(['iconutil', '-c', 'icns', str(folder), '-o', str(exports / f'Snowbound-{name}.icns')], check=True)
43board.convert('RGB').save(root / 'Snowbound-comparison.png', icc_profile=profile)
crates/snowbound/assets/icon/sources/render_blender.py created+16
......@@ -0,0 +1,16 @@
1import bpy
2from pathlib import Path
3
4root=Path(bpy.data.filepath).parent.parent
5s=bpy.context.scene
6stem='SnowLeopard' if s.name.startswith('2010') else 'Sequoia'
7s.render.image_settings.file_format='OPEN_EXR'
8s.render.image_settings.color_depth='16'
9s.render.image_settings.exr_codec='ZIP'
10(root/'renders').mkdir(exist_ok=True)
11s.render.filepath=str(root/'renders'/f'{stem}.exr')
12bpy.ops.render.render(write_still=True)
13s.render.image_settings.file_format='PNG'
14s.render.filepath=str(root/'renders'/f'{stem}.png')
15bpy.data.images['Render Result'].save_render(s.render.filepath,scene=s)
16
crates/snowbound/assets/icon/sources/render_glass.py created+13
......@@ -0,0 +1,13 @@
1from pathlib import Path
2import subprocess
3
4root = Path(__file__).resolve().parent.parent
5(root / 'exports').mkdir(exist_ok=True)
6tool = '/Applications/Xcode.app/Contents/Applications/Icon Composer.app/Contents/Executables/ictool'
7for suffix, rendition in (('', 'Default'), ('-Dark', 'Dark'), ('-Mono', 'Mono')):
8 subprocess.run([
9 tool, str(root / 'sources/Snowbound-Tahoe.icon'), '--export-image',
10 '--output-file', str(root / 'exports' / f'Snowbound-Tahoe{suffix}.png'),
11 '--platform', 'macOS', '--rendition', rendition,
12 '--width', '1024', '--height', '1024', '--scale', '1', '--light-angle', '-53',
13 ], check=True)
tools/canvas/build_macos.py+6
......@@ -3,6 +3,7 @@
33import argparse
44import json
55from pathlib import Path
6import platform
67import plistlib
78import shutil
89import subprocess
......@@ -28,6 +29,10 @@ binary.parent.mkdir(parents=True, exist_ok=True)
2829pending = binary.with_suffix('.next')
2930shutil.copy2(target / ('release' if args.release else 'debug') / 'one-canvas-app', pending)
3031pending.replace(binary)
32icon = 'Snowbound-Tahoe' if int(platform.mac_ver()[0].split('.')[0] or 0) >= 26 else 'Snowbound-Sequoia'
33resources = bundle / 'Contents/Resources'
34resources.mkdir(exist_ok=True)
35shutil.copy2(root / 'crates/snowbound/assets/icon' / f'{icon}.icns', resources / 'Snowbound.icns')
3136(bundle / 'Contents/Info.plist').write_bytes(plistlib.dumps({
3237 'CFBundleExecutable': binary.name,
3338 'CFBundleIdentifier': args.bundle_id or 'dev.onecanvas.app',
......@@ -37,6 +42,7 @@ pending.replace(binary)
3742 'CFBundleVersion': '1',
3843 'NSHighResolutionCapable': True,
3944 'NSPrincipalClass': 'NSApplication',
45 'CFBundleIconFile': 'Snowbound',
4046}))
4147subprocess.run(['codesign', '--force', '--sign', '-', str(bundle)], check=True)
4248subprocess.run(['codesign', '--verify', '--strict', str(bundle)], check=True)