├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── animation.go ├── blinkygo.go ├── errors.go ├── pattern.go ├── patterns └── arduino │ ├── colors.h │ ├── cylon.h │ ├── laser_cat.h │ ├── shadow.h │ ├── shimmer.h │ └── whitebeats.h └── pixel.go /.gitattributes: -------------------------------------------------------------------------------- 1 | patterns/* linguist-vendored 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/osx,windows,go,git 2 | 3 | ### OSX ### 4 | *.DS_Store 5 | .AppleDouble 6 | .LSOverride 7 | 8 | # Icon must end with two \r 9 | Icon 10 | 11 | 12 | # Thumbnails 13 | ._* 14 | 15 | # Files that might appear in the root of a volume 16 | .DocumentRevisions-V100 17 | .fseventsd 18 | .Spotlight-V100 19 | .TemporaryItems 20 | .Trashes 21 | .VolumeIcon.icns 22 | .com.apple.timemachine.donotpresent 23 | 24 | # Directories potentially created on remote AFP share 25 | .AppleDB 26 | .AppleDesktop 27 | Network Trash Folder 28 | Temporary Items 29 | .apdisk 30 | 31 | 32 | ### Windows ### 33 | # Windows image file caches 34 | Thumbs.db 35 | ehthumbs.db 36 | 37 | # Folder config file 38 | Desktop.ini 39 | 40 | # Recycle Bin used on file shares 41 | $RECYCLE.BIN/ 42 | 43 | # Windows Installer files 44 | *.cab 45 | *.msi 46 | *.msm 47 | *.msp 48 | 49 | # Windows shortcuts 50 | *.lnk 51 | 52 | 53 | ### Go ### 54 | # Compiled Object files, Static and Dynamic libs (Shared Objects) 55 | *.o 56 | *.a 57 | *.so 58 | 59 | # Folders 60 | _obj 61 | _test 62 | 63 | # Architecture specific extensions/prefixes 64 | *.[568vq] 65 | [568vq].out 66 | 67 | *.cgo1.go 68 | *.cgo2.c 69 | _cgo_defun.c 70 | _cgo_gotypes.go 71 | _cgo_export.* 72 | 73 | _testmain.go 74 | 75 | *.exe 76 | *.test 77 | *.prof 78 | 79 | 80 | ### Git ### 81 | *.orig 82 | 83 | ### Misc ### 84 | TODO 85 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016, William Poussier 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BlinkyGo 2 | 3 | [![GoDoc](https://godoc.org/github.com/wI2l/blinkygo?status.svg)](https://godoc.org/github.com/wI2l/blinkygo) [![Go Report Card](https://goreportcard.com/badge/github.com/wI2L/blinkygo)](https://goreportcard.com/report/github.com/wI2L/blinkygo) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE) 4 | 5 | A simple, well featured library that let you control your [**BlinkyTape LED strip**](http://blinkinlabs.com/blinkytape/) from _BlinkyLabs_, using the [Go Programming language](https://golang.org/). 6 | 7 | ### Installation 8 | 9 | ```sh 10 | $ go get -u github.com/wI2L/blinkygo 11 | ``` 12 | 13 | ## Basics 14 | 15 | Create a new BlinkyTape instance. You must pass two parameters: 16 | - the serial port name to open 17 | eg: *COM3* (Windows), */dev/tty/usbmodem1421* (OSX) 18 | - the number of pixels on the LED strip 19 | 20 | ```go 21 | import blinky "github.com/wI2L/blinkygo" 22 | 23 | bt, err := blinky.NewBlinkyTape("/dev/tty.usbmodem1421", 60) 24 | if err != nil { 25 | log.Fatal(err) 26 | } 27 | defer bt.Close() 28 | ``` 29 | 30 | When a new BlinkyTape instance is created, all its pixels are initialised to be black; *RGB(0, 0, 0)*. All operations that modify the state of the LED strip are buffered using an internal bytes buffer. You have to manually "commit" the changes when you want them to take effect. 31 | 32 | ### Set the next pixel 33 | 34 | ```go 35 | // Create a new color 36 | red := blinky.NewRGBColor(255, 0, 0) 37 | // Create the pixel 38 | pixel := blinky.Pixel{Color: red} 39 | 40 | for (i := 0; i < bt.PixelCount; i++) { 41 | err := bt.SetNextPixel(pixel) 42 | } 43 | ``` 44 | 45 | `setNextPixel()` will set a pixel to the next available position. The position is incremented each time this function is called and resets when accumulated data is sent to the LED strip. 46 | Be carefull not to exceed the number of pixels the instance was initialized for when calling this function or it will return a `RangeError` 47 | 48 | ### Set a pixel at a specified position 49 | 50 | ```go 51 | 52 | // Set a yellow pixel at the position 1 (second led) 53 | pixel := blinky.Pixel{Color: NewRGBColor(255, 255, 0)} 54 | err := bt.SetPixelAt(pixel, 1) 55 | ``` 56 | 57 | When you set a pixel at a specified position, it has to internally rewrite the whole buffer, which is slower. 58 | 59 | ### Set a list of pixels 60 | 61 | ```go 62 | color := NewRGBColor(0, 255, 0) 63 | pixels := [Pixel{Color: color}] 64 | 65 | err := bt.SetPixels(pixels) 66 | ``` 67 | 68 | Set a list of pixels, starting from the beginning. If the slice provided as argument contains more pixels than the BlinkyTape instance was initialized for, the remaining will be gently ignored. 69 | 70 | ### Set a color 71 | 72 | ```go 73 | white := NewRGBColor(255, 255, 255) 74 | err := bt.SetColor(color) 75 | ``` 76 | 77 | It set the same color to all the pixels of the LED strip. 78 | 79 | ### Render accumulated data 80 | 81 | ```go 82 | err := bt.Render() 83 | ``` 84 | 85 | When you want to apply the changes you made, call this function. It will send all accumulated data to the LED strip and reset it state. The strip will immediately reflects the modifications. 86 | 87 | ### Discard changes 88 | 89 | ```go 90 | err := bt.Reset() 91 | ``` 92 | If you want to discard any previous changes without rendering them, call `Reset()`. It clear the internal buffer and reset the position of the next pixel to 0. 93 | 94 | ### Switch off LED strip 95 | 96 | You can also switch off the LED strip. It will set black color to all pixels and render the changes. This gives the impression the LED strip extinguished. 97 | 98 | ```go 99 | err := bt.SwitchOff() 100 | 101 | // This is similar to writing: 102 | // bt.SetColor(NewRGBColor(0, 0, 0)) 103 | // bt.Render() 104 | ``` 105 | 106 | ## Colors 107 | 108 | There is three different ways to create a `Color` instance. 109 | 110 | __RGB triplet__ 111 | 112 | ```go 113 | blue := blinky.NewRGBColor(0, 0, 255) 114 | white := blinky.NewRGBColor(255, 255, 255) 115 | red := blinky.NewRGBColor(255, 0, 0) 116 | ``` 117 | 118 | __HTML hex color-string format__ 119 | 120 | The first character `#` of the hex color-string format is optional and can be omitted. 121 | 122 | ```go 123 | purple, _ := blinky.NewHEXColor("#800080") 124 | orange, _ := blinky.NewHEXColor("FFA500") 125 | pink, _ := blinky.NewHEXColor("#F06") 126 | ``` 127 | 128 | __Named color__ 129 | 130 | Supported names are from the _colornames_ package, see https://godoc.org/golang.org/x/image/colornames. 131 | 132 | ```go 133 | olive, _ := blinky.NewNamedColor("Olive") 134 | violet, _ := blinky.NewNamedColor("Violet") 135 | ``` 136 | `NewHEXColor()` and `NewNamedColor()` will return an error if the input format is invalid or the name is unknown. 137 | 138 | ## Patterns 139 | 140 | A `Pattern` is a list of `Frame`, each containing a list of pixels. Patterns can be used to create an `Animation`. You create them manually, or from an external source like an Arduino C header file exported by PatternPaint, or an image. 141 | 142 | ### Image 143 | 144 | A pattern can be decoded from an image. You have to indicate how many pixels should be extracted per frame. 145 | 146 | Frames will be extracted from axis `y`. If the number of pixels to extract is lower than the image's height, the rest of the pixels in each frame will be black. Instead, if the image's height is greater, then it will be resized to the exact dimension while preserving the original image aspect ratio. 147 | 148 | Image types `png`, `jpeg`, `bmp` and `gif` are supported. 149 | 150 | ```go 151 | pattern, err := blinky.NewPatternFromImage("pattern.png", 60) 152 | ``` 153 | 154 | ### Arduino C header export 155 | 156 | _PatternPaint_ can export a pattern drawn with it as an Arduino C Header. You can parse them as well to create a pattern. 157 | 158 | ```go 159 | pattern, err := blinky.NewPatternFromArduinoExport("pattern.h") 160 | ``` 161 | 162 | ## Animations 163 | 164 | An `Animation` is the composition of a `Pattern` and a set of parameters to define how it should be played, and how many times. 165 | 166 | You can import an animation from a file 167 | ```go 168 | anim, err := NewAnimationFromFile("animation.json") 169 | if err != nil { 170 | // do whatever you want with the animation 171 | } 172 | ``` 173 | or create it literally 174 | ```go 175 | p, _ := blinky.NewPatternFromImage("cylon.png", 60) 176 | anim := &blinky.Animation{ 177 | Name: "clyon", 178 | Repeat: 10, 179 | Speed: 50 180 | Pattern: p, 181 | } 182 | ``` 183 | - `repeat` indicate how many times the pattern must be played. A negative number will run an infinite loop. 184 | - `speed` is a convenient and simple way to add a delay between each frame. The delay, expressed in milliseconds, is calculated as `1000 / speed`. 185 | 186 | ### Play an animation 187 | 188 | ```go 189 | bt, err := blinky.NewBlinkyTape("/dev/tty.usbmodem1421", 60) 190 | // error handling 191 | bt.Play(anim, nil) 192 | ``` 193 | 194 | You can also provide a configuration struct to override the animation parameters. It allows you to define a specific delay to use between each frame. 195 | 196 | ```go 197 | // Configure the animation to play the pattern indefinitely, 198 | // with a delay of 66ms between each frame 199 | config := &blinky.AnimationConfig{ 200 | Repeat: -1, 201 | Delay: 66 * time.Millisecond, 202 | } 203 | bt.Play(anim, config) 204 | ``` 205 | 206 | Notes: 207 | 208 | - You can't change the state of the LED strip nor rendering while an animation is being played. This is only possible while an animation is stopped or paused. 209 | 210 | - If `Play()` is called while an animation is running or paused, it will stop it before launching the new one. 211 | 212 | ### Controls 213 | 214 | While an animation is being played on the LED strip, you can control it and retrieve its status. 215 | 216 | ```go 217 | // Pause a running animation 218 | bt.Pause() 219 | // Resume a paused animation 220 | bt.Resume() 221 | // Stop an animation 222 | // Can be calLED even if the animation is in a paused state 223 | bt.Stop() 224 | 225 | // Get the status of the animation loop 226 | status := bt.Status() 227 | switch status { 228 | case blinky.StatusRunning: 229 | // animation is running 230 | case blinky.StatusPaused: 231 | // animation is paused 232 | case blinky.StatusStopped: 233 | // no animation is running 234 | } 235 | 236 | // similar to "bt.Status() == StatusRunning" 237 | if bt.IsRunning() { 238 | fmt.Println("An animation is running on this BlinkyTape") 239 | } 240 | ``` 241 | 242 | ### Export to a file 243 | 244 | You can export an animation to a file if you want to reuse it later. The file will use the JSON format to represent its content. 245 | 246 | ```go 247 | // Export 248 | err := anim.SaveToFile("animation.json") 249 | if err != nil { 250 | // animation has been saved successfully 251 | } 252 | ``` 253 | 254 | ## Share yours 255 | 256 | If you create a nice pattern manually of with *PatternPaint* and want to share it with others, send me a mail and i will add it to the repository. You can find a bunch of patterns in [this folder](/patterns) 257 | 258 | ## License 259 | 260 | Copyright (c) 2016, William Poussier (MIT Licence) 261 | -------------------------------------------------------------------------------- /animation.go: -------------------------------------------------------------------------------- 1 | /* 2 | The MIT License 3 | 4 | Copyright (c) 2016, William Poussier 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | */ 24 | 25 | package blinkygo 26 | 27 | import ( 28 | "encoding/json" 29 | "io/ioutil" 30 | "time" 31 | ) 32 | 33 | // An Animation is composed of a Pattern to play with a BlinkyTape 34 | // based on a playback speed and an number of repetitions. 35 | type Animation struct { 36 | Name string `json:"name"` 37 | Repeat int `json:"repeat"` 38 | Speed uint `json:"speed"` 39 | Pattern Pattern `json:"pattern"` 40 | } 41 | 42 | // AnimationConfig represents the configuration of an Animation. 43 | type AnimationConfig struct { 44 | // Repeat indicates how many times the pattern has to be played 45 | Repeat int 46 | // Delay is the duration to wait between the rendering of two frames 47 | Delay time.Duration 48 | } 49 | 50 | // NewAnimationFromFile create a new Animation instance from a file. 51 | // The animation file must use JSON as its marshalling format. 52 | func NewAnimationFromFile(path string) (*Animation, error) { 53 | anim := Animation{} 54 | 55 | raw, err := ioutil.ReadFile(path) 56 | if err != nil { 57 | return nil, err 58 | } 59 | json.Unmarshal(raw, &anim) 60 | 61 | return &anim, nil 62 | } 63 | 64 | // SaveToFile marshall an Animation to JSON format and 65 | // write it to a file. 66 | func (a Animation) SaveToFile(path string) error { 67 | data, err := json.Marshal(a) 68 | if err != nil { 69 | return err 70 | } 71 | err = ioutil.WriteFile(path, data, 0644) 72 | if err != nil { 73 | return err 74 | } 75 | return nil 76 | } 77 | -------------------------------------------------------------------------------- /blinkygo.go: -------------------------------------------------------------------------------- 1 | /* 2 | The MIT License 3 | 4 | Copyright (c) 2016, William Poussier 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | */ 24 | 25 | // Package blinkygo provides utilities to control a 26 | // BlinkyTape LED strip. 27 | package blinkygo 28 | 29 | import ( 30 | "bytes" 31 | "sync" 32 | "time" 33 | 34 | "github.com/ivahaev/timer" 35 | "github.com/tarm/serial" 36 | ) 37 | 38 | const ( 39 | // ControlHeader is the byte sent to the led strip to render a new state. 40 | ControlHeader byte = 0xFF 41 | 42 | // AnimationDefaultDelay is the default delay to wait between two frames 43 | // of a pattern. 44 | AnimationDefaultDelay time.Duration = 75 * time.Millisecond 45 | ) 46 | 47 | // Status constants. 48 | const ( 49 | // StatusStopped means no animation is running. 50 | StatusStopped AnimationStatus = iota 51 | // StatusRunning means an animations is being played. 52 | StatusRunning 53 | // StatusPaused means a running animation is paused. 54 | StatusPaused 55 | ) 56 | 57 | // AnimationStatus represents the animation loop status 58 | // of a BlinkyTape instance. 59 | type AnimationStatus int 60 | 61 | // A BlinkyTape represents a BlinkyTape LED strip. 62 | // All operations that modify the state of the strip are buffered. 63 | type BlinkyTape struct { 64 | serial *serial.Port 65 | currState, nextState []Pixel 66 | buffer bytes.Buffer 67 | stop, pause, resume chan struct{} 68 | position uint 69 | status AnimationStatus 70 | mutex sync.Mutex 71 | 72 | // PixelCount is the number of pixels the LED strip was initialized with. 73 | PixelCount uint 74 | } 75 | 76 | // NewBlinkyTape creates a new BlinkyTape instance. 77 | // The led strip is created with all pixels set to black. 78 | func NewBlinkyTape(portName string, count uint) (*BlinkyTape, error) { 79 | if count == 0 { 80 | return nil, ErrNoPixels 81 | } 82 | 83 | config := &serial.Config{ 84 | Name: portName, 85 | Baud: 115200, 86 | ReadTimeout: time.Millisecond * 500, 87 | } 88 | port, err := serial.OpenPort(config) 89 | if err != nil { 90 | return nil, err 91 | } 92 | 93 | blinky := &BlinkyTape{ 94 | serial: port, 95 | currState: make([]Pixel, count), 96 | nextState: make([]Pixel, count), 97 | pause: make(chan struct{}), 98 | resume: make(chan struct{}), 99 | stop: make(chan struct{}), 100 | position: 0, 101 | PixelCount: count, 102 | status: StatusStopped, 103 | } 104 | 105 | // send the control header after initializtion to stop any pattern 106 | // playing on the LED strip before issuing future commands. 107 | if err := blinky.sendBytes([]byte{ControlHeader}); err != nil { 108 | return nil, err 109 | } 110 | return blinky, nil 111 | } 112 | 113 | // Close closes the serial port. 114 | func (bt *BlinkyTape) Close() error { 115 | bt.Stop() 116 | return bt.serial.Close() 117 | } 118 | 119 | // Render sends all accumulated pixel data followed by a control byte 120 | // to the LED strip to render a new state. It also reset the internal 121 | // buffer and reset the next position to 0. 122 | func (bt *BlinkyTape) Render() error { 123 | if bt.IsRunning() { 124 | return ErrBusyPlaying 125 | } 126 | return bt.render() 127 | } 128 | 129 | func (bt *BlinkyTape) render() error { 130 | if bt.buffer.Len() == 0 { 131 | return ErrEmptyBuffer 132 | } 133 | if _, errW := bt.buffer.Write([]byte{ControlHeader}); errW != nil { 134 | return ErrWriteCtrlHeader 135 | } 136 | if err := bt.sendBytes(bt.buffer.Bytes()); err != nil { 137 | return err 138 | } 139 | bt.clear() 140 | bt.currState = bt.nextState 141 | 142 | return nil 143 | } 144 | 145 | // Reset discards any changes made to the LED strip's state. 146 | func (bt *BlinkyTape) Reset() error { 147 | if bt.IsRunning() { 148 | return ErrBusyPlaying 149 | } 150 | bt.clear() 151 | bt.nextState = bt.currState 152 | 153 | return nil 154 | } 155 | 156 | func (bt *BlinkyTape) clear() { 157 | bt.position = 0 158 | bt.buffer.Reset() 159 | } 160 | 161 | // SwitchOff switches off the LED strip. 162 | // This actually set the color to black for all pixels and calls Render(). 163 | func (bt *BlinkyTape) SwitchOff() error { 164 | if err := bt.SetColor(NewRGBColor(0, 0, 0)); err != nil { 165 | return err 166 | } 167 | return bt.Render() 168 | } 169 | 170 | // Play plays an Animation with the LED strip. 171 | // If an animation is already being played, it is stopped in 172 | // favor of the new one. The animation loop can be paused, resumed 173 | // or stopped at any moment, regardless its status. 174 | // A negative number of repetitions will start an infinite loop. 175 | func (bt *BlinkyTape) Play(a *Animation, cfg *AnimationConfig) { 176 | var ( 177 | repeat int 178 | delay time.Duration 179 | ) 180 | 181 | if cfg == nil { 182 | repeat = a.Repeat 183 | if a.Speed != 0 { 184 | delay = time.Second / time.Duration(a.Speed) 185 | } else { 186 | delay = AnimationDefaultDelay 187 | } 188 | } else { 189 | repeat = cfg.Repeat 190 | delay = cfg.Delay 191 | } 192 | 193 | // avoid entering the loop if there is no repetitions to process 194 | if repeat != 0 { 195 | bt.Stop() 196 | go bt.animation(a.Pattern, repeat, delay) 197 | } 198 | } 199 | 200 | // Status returns the animation status of the LED strip. 201 | func (bt *BlinkyTape) Status() AnimationStatus { 202 | bt.mutex.Lock() 203 | defer bt.mutex.Unlock() 204 | return bt.status 205 | } 206 | 207 | func (bt *BlinkyTape) updateStatus(as AnimationStatus) { 208 | bt.mutex.Lock() 209 | defer bt.mutex.Unlock() 210 | bt.status = as 211 | } 212 | 213 | // IsRunning returns whether or not an animation is running. 214 | func (bt *BlinkyTape) IsRunning() bool { 215 | return bt.Status() == StatusRunning 216 | } 217 | 218 | // Stop stops the animation being played on the LED strip. A stop can 219 | // occur at any moment between the render of two frames regardless the 220 | // delay, or during a pause. 221 | // If there is no animation being played or paused, do nothing. 222 | func (bt *BlinkyTape) Stop() { 223 | bt.mutex.Lock() 224 | defer bt.mutex.Unlock() 225 | if bt.status == StatusRunning || bt.status == StatusPaused { 226 | bt.stop <- struct{}{} 227 | } 228 | } 229 | 230 | // Pause pauses the animation being played on the LED strip. 231 | // If there is no animation being played, do nothing. 232 | func (bt *BlinkyTape) Pause() { 233 | bt.mutex.Lock() 234 | defer bt.mutex.Unlock() 235 | if bt.status == StatusRunning { 236 | bt.pause <- struct{}{} 237 | } 238 | } 239 | 240 | // Resume resumes a previous animation that was paused. 241 | // If the animation was paused during the delay between the render of 242 | // two frames, the remaining of the delay will be respected. 243 | // If there is no animation to resume, do nothing. 244 | func (bt *BlinkyTape) Resume() { 245 | bt.mutex.Lock() 246 | defer bt.mutex.Unlock() 247 | if bt.status == StatusPaused { 248 | bt.resume <- struct{}{} 249 | } 250 | } 251 | 252 | func (bt *BlinkyTape) animation(p Pattern, repeat int, delay time.Duration) { 253 | bt.updateStatus(StatusRunning) 254 | 255 | // if the number of repetitions is less than zero, launch 256 | // an infinite loop that can be broken by calling Stop() 257 | if repeat < 0 { 258 | for { 259 | if !bt.playPattern(p, delay) { 260 | break 261 | } 262 | } 263 | } else { 264 | for i := 0; i < repeat; i++ { 265 | if !bt.playPattern(p, delay) { 266 | break 267 | } 268 | } 269 | } 270 | bt.updateStatus(StatusStopped) 271 | } 272 | 273 | func (bt *BlinkyTape) playPattern(p Pattern, delay time.Duration) bool { 274 | bt.clear() 275 | 276 | for _, frame := range p { 277 | bt.setPixels(frame) 278 | 279 | if err := bt.render(); err != nil { 280 | // if the frame cannot be rendered, skip it 281 | continue 282 | } 283 | timer := timer.NewTimer(delay) 284 | timer.Start() 285 | 286 | select { 287 | case <-bt.stop: 288 | return false 289 | case <-bt.pause: 290 | if paused := timer.Pause(); paused != false { 291 | bt.updateStatus(StatusPaused) 292 | select { 293 | case <-bt.stop: 294 | return false 295 | case <-bt.resume: 296 | if started := timer.Start(); started != false { 297 | bt.updateStatus(StatusRunning) 298 | select { 299 | case <-bt.stop: 300 | return false 301 | case <-timer.C: 302 | continue 303 | } 304 | } 305 | } 306 | } 307 | case <-timer.C: 308 | continue 309 | } 310 | } 311 | return true 312 | } 313 | 314 | // SetColor sets all pixels to the same color. 315 | func (bt *BlinkyTape) SetColor(c Color) error { 316 | if bt.IsRunning() { 317 | return ErrBusyPlaying 318 | } 319 | bt.clear() 320 | 321 | pixel := Pixel{Color: c} 322 | for i := 0; i < int(bt.PixelCount); i++ { 323 | if err := bt.setNextPixel(pixel); err != nil { 324 | return err 325 | } 326 | } 327 | return nil 328 | } 329 | 330 | // SetPixels sets pixels from a list. 331 | func (bt *BlinkyTape) SetPixels(p []Pixel) error { 332 | if bt.IsRunning() { 333 | return ErrBusyPlaying 334 | } 335 | return bt.setPixels(p) 336 | } 337 | 338 | func (bt *BlinkyTape) setPixels(pixels []Pixel) error { 339 | for c, p := range pixels { 340 | if c > (int(bt.PixelCount) - 1) { 341 | break 342 | } 343 | if err := bt.setNextPixel(p); err != nil { 344 | return err 345 | } 346 | } 347 | return nil 348 | } 349 | 350 | // SetNextPixel sets a pixel at the next position. 351 | func (bt *BlinkyTape) SetNextPixel(p Pixel) error { 352 | if bt.IsRunning() { 353 | return ErrBusyPlaying 354 | } 355 | return bt.setNextPixel(p) 356 | } 357 | 358 | func (bt *BlinkyTape) setNextPixel(p Pixel) error { 359 | if bt.position > (bt.PixelCount - 1) { 360 | return RangeError{ 361 | Position: bt.position, 362 | MaxRange: bt.PixelCount - 1, 363 | } 364 | } 365 | if _, err := bt.buffer.Write(p.clampedRGBTriplet()); err != nil { 366 | return PixelError{ 367 | Pixel: p, 368 | Position: bt.position, 369 | err: err, 370 | } 371 | } 372 | bt.nextState[bt.position] = p 373 | bt.position++ 374 | 375 | return nil 376 | } 377 | 378 | // SetPixelAt sets a pixel at the specified position. 379 | // The operation has to rewrite the whole buffer. 380 | func (bt *BlinkyTape) SetPixelAt(p *Pixel, position uint) error { 381 | if bt.IsRunning() { 382 | return ErrBusyPlaying 383 | } 384 | if position > bt.PixelCount { 385 | return ErrOutOfRange 386 | } 387 | 388 | bt.nextState[position] = *p 389 | bt.buffer.Reset() 390 | 391 | for _, p := range bt.nextState { 392 | if _, err := bt.buffer.Write(p.clampedRGBTriplet()); err != nil { 393 | return err 394 | } 395 | } 396 | return nil 397 | } 398 | 399 | func (bt *BlinkyTape) sendBytes(data []byte) error { 400 | if err := bt.serial.Flush(); err != nil { 401 | return err 402 | } 403 | if _, err := bt.serial.Write(data); err != nil { 404 | return err 405 | } 406 | return nil 407 | } 408 | -------------------------------------------------------------------------------- /errors.go: -------------------------------------------------------------------------------- 1 | /* 2 | The MIT License 3 | 4 | Copyright (c) 2016, William Poussier 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | */ 24 | 25 | package blinkygo 26 | 27 | import ( 28 | "errors" 29 | "fmt" 30 | ) 31 | 32 | var ( 33 | // ErrBusyPlaying is returned when a command that attempt to modify the 34 | // state of the LED strip is called when an animation is currently running. 35 | ErrBusyPlaying = errors.New("led strip is busy playing an animation") 36 | 37 | // ErrNoPixels is returned when a null number of pixels is used to create 38 | // a BlinkyTape instance. 39 | ErrNoPixels = errors.New("number of pixels cannot be null") 40 | 41 | // ErrEmptyBuffer is returned when an attempt to send accumulated data to the 42 | // led strip find an empty buffer. 43 | ErrEmptyBuffer = errors.New("nothing to render, the buffer is empty") 44 | 45 | // ErrWriteCtrlHeader is returned when an error occur while attempting to write 46 | // the control header at the end of the buffer. 47 | ErrWriteCtrlHeader = errors.New("couldn't write control header at the end of the buffer") 48 | 49 | // ErrOutOfRange is returned when attempting to set a pixel out of the range of 50 | // the led strip available pixels. 51 | ErrOutOfRange = errors.New("attempting to set pixel outside of range") 52 | 53 | // ErrUnknownColorName is returned when a named color is unknown. 54 | ErrUnknownColorName = errors.New("unknown color name") 55 | ) 56 | 57 | // PixelError describes an error related to a pixel command. 58 | // It provides a copy of the pixel, and its position inside the 59 | // LED strip's pixels range. 60 | type PixelError struct { 61 | Pixel Pixel 62 | Position uint 63 | err error 64 | } 65 | 66 | func (e PixelError) Error() string { 67 | return fmt.Sprintf("pixel error at position #%d - RGB(%v,%v,%v): %s\n", 68 | e.Position, 69 | e.Pixel.Color.R, e.Pixel.Color.G, e.Pixel.Color.B, 70 | e.err, 71 | ) 72 | } 73 | 74 | // RangeError describes an error related to a range excess. 75 | // It provides the position that caused the error, and the max 76 | // range of the led strip's pixels. 77 | type RangeError struct { 78 | Position uint 79 | MaxRange uint 80 | } 81 | 82 | func (e RangeError) Error() string { 83 | return fmt.Sprintf("range error: trying to set pixel at position %d, allowed range is [0-%d]", 84 | e.Position, 85 | e.MaxRange, 86 | ) 87 | } 88 | 89 | // InvalidHEXColor describes an error related to an HTML hex-color parsing. 90 | type InvalidHEXColor struct { 91 | color string 92 | err error 93 | } 94 | 95 | func (e InvalidHEXColor) Error() string { 96 | return fmt.Sprintf("%v is not an hexadecimal color: %s", e.color, e.err.Error()) 97 | } 98 | -------------------------------------------------------------------------------- /pattern.go: -------------------------------------------------------------------------------- 1 | /* 2 | The MIT License 3 | 4 | Copyright (c) 2016, William Poussier 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | */ 24 | 25 | package blinkygo 26 | 27 | import ( 28 | "bufio" 29 | "fmt" 30 | "image" 31 | "image/draw" 32 | "os" 33 | "strings" 34 | 35 | // Image decoding 36 | _ "image/gif" 37 | _ "image/jpeg" 38 | _ "image/png" 39 | 40 | "github.com/nfnt/resize" 41 | // Image decoding 42 | _ "golang.org/x/image/bmp" 43 | ) 44 | 45 | // A Frame represents a list of pixels. 46 | type Frame []Pixel 47 | 48 | // A Pattern represents a list of frames. 49 | type Pattern []Frame 50 | 51 | // NewPatternFromImage returns a new pattern created from an image. 52 | // Types 'jpeg', 'png', 'gif' and 'bmp' are supported. 53 | func NewPatternFromImage(path string, pixelCount uint) (Pattern, error) { 54 | if pixelCount == 0 { 55 | return nil, ErrNoPixels 56 | } 57 | source, err := readImage(path) 58 | if err != nil { 59 | return nil, err 60 | } 61 | 62 | var img image.Image 63 | bounds := source.Bounds() 64 | if bounds.Dy() > int(pixelCount) { 65 | // the resize function preserves the aspect ratio 66 | img = resize.Resize(0, pixelCount, source, resize.Bilinear) 67 | } else { 68 | img = source 69 | } 70 | 71 | // draw a new rgba image from source, so we can directly 72 | // access to the rgb representation of each pixel in Pix field 73 | bounds = img.Bounds() 74 | rgba := image.NewRGBA(bounds) 75 | draw.Draw(rgba, bounds, img, bounds.Min, draw.Src) 76 | 77 | // loop across the pixels and create frames 78 | pattern := make(Pattern, bounds.Dx()) 79 | 80 | for x := 0; x < bounds.Dx(); x++ { 81 | f := make(Frame, pixelCount) 82 | for y := 0; y < bounds.Dy(); y++ { 83 | r := rgba.Pix[rgba.PixOffset(x, y)] 84 | g := rgba.Pix[rgba.PixOffset(x, y)+1] 85 | b := rgba.Pix[rgba.PixOffset(x, y)+2] 86 | 87 | f[y] = Pixel{ 88 | Color: NewRGBColor(brightnessCorrect(r, g, b)), 89 | } 90 | } 91 | pattern[x] = f 92 | } 93 | return pattern, nil 94 | } 95 | 96 | // readImage open a file and return an image. 97 | func readImage(path string) (image.Image, error) { 98 | reader, err := os.Open(path) 99 | if err != nil { 100 | return nil, err 101 | } 102 | img, _, err := image.Decode(reader) 103 | if err != nil { 104 | return nil, err 105 | } 106 | reader.Close() 107 | 108 | return img, nil 109 | } 110 | 111 | // NewPatternFromArduinoExport returns a new pattern created 112 | // from an Arduino C header file exported from PatternPaint. 113 | func NewPatternFromArduinoExport(path string) (Pattern, error) { 114 | pattern := make(Pattern, 0) 115 | 116 | lines, err := readLines(path) 117 | if err != nil { 118 | return nil, err 119 | } 120 | fc := -1 121 | ll := len(lines) - 3 122 | 123 | // loop across the lines and create frames 124 | // ignore the first line, and the last three 125 | for i := 1; i < ll; i++ { 126 | if strings.HasPrefix(lines[i], "//") { 127 | pattern = append(pattern, make(Frame, 0)) 128 | fc++ 129 | } else { 130 | var r, g, b byte 131 | _, err := fmt.Sscanf(lines[i], "%v,%v,%v,", &r, &g, &b) 132 | if err != nil { 133 | return nil, err 134 | } 135 | pattern[fc] = append(pattern[fc], Pixel{ 136 | Color: NewRGBColor(r, g, b), 137 | }) 138 | } 139 | } 140 | return pattern, nil 141 | } 142 | 143 | // readLines reads the content of a file 144 | // and returns a slice of its lines. 145 | func readLines(path string) ([]string, error) { 146 | reader, err := os.Open(path) 147 | if err != nil { 148 | return nil, err 149 | } 150 | var lines []string 151 | scanner := bufio.NewScanner(reader) 152 | 153 | // read each line and append it in a slice that 154 | // grows dynamically 155 | for scanner.Scan() { 156 | lines = append(lines, scanner.Text()) 157 | } 158 | reader.Close() 159 | 160 | return lines, scanner.Err() 161 | } 162 | -------------------------------------------------------------------------------- /patterns/arduino/laser_cat.h: -------------------------------------------------------------------------------- 1 | const uint8_t animationData[] PROGMEM = { 2 | // Frame: 0 3 | 2, 3, 11, // 0 4 | 3, 4, 10, // 1 5 | 2, 3, 9, // 2 6 | 0, 1, 5, // 3 7 | 3, 5, 11, // 4 8 | 0, 1, 4, // 5 9 | 0, 1, 4, // 6 10 | 0, 1, 4, // 7 11 | 2, 3, 8, // 8 12 | 0, 1, 4, // 9 13 | 1, 2, 6, // 10 14 | 0, 1, 4, // 11 15 | 2, 3, 8, // 12 16 | 4, 6, 11, // 13 17 | 0, 1, 4, // 14 18 | 1, 2, 6, // 15 19 | 1, 1, 5, // 16 20 | 0, 1, 5, // 17 21 | 1, 2, 6, // 18 22 | 3, 5, 8, // 19 23 | 0, 0, 4, // 20 24 | 3, 4, 7, // 21 25 | 0, 0, 0, // 22 26 | 1, 1, 4, // 23 27 | 0, 0, 1, // 24 28 | 0, 0, 0, // 25 29 | 43, 73, 55, // 26 30 | 0, 0, 1, // 27 31 | 0, 0, 0, // 28 32 | 0, 0, 2, // 29 33 | 1, 2, 4, // 30 34 | 0, 1, 2, // 31 35 | 0, 0, 1, // 32 36 | 1, 1, 3, // 33 37 | 1, 1, 2, // 34 38 | 1, 1, 2, // 35 39 | 0, 0, 0, // 36 40 | 0, 0, 0, // 37 41 | 1, 1, 1, // 38 42 | 0, 0, 0, // 39 43 | 1, 2, 2, // 40 44 | 1, 1, 1, // 41 45 | 0, 0, 1, // 42 46 | 0, 0, 1, // 43 47 | 0, 0, 2, // 44 48 | 0, 1, 3, // 45 49 | 3, 4, 8, // 46 50 | 0, 1, 1, // 47 51 | 0, 0, 0, // 48 52 | 7, 4, 5, // 49 53 | 0, 0, 0, // 50 54 | 0, 0, 0, // 51 55 | 0, 0, 1, // 52 56 | 0, 1, 1, // 53 57 | 7, 9, 7, // 54 58 | 0, 0, 0, // 55 59 | 0, 1, 2, // 56 60 | 0, 1, 2, // 57 61 | 0, 0, 1, // 58 62 | 1, 1, 3, // 59 63 | // Frame: 1 64 | 57, 110, 146, // 0 65 | 3, 4, 9, // 1 66 | 1, 2, 7, // 2 67 | 0, 1, 4, // 3 68 | 0, 0, 2, // 4 69 | 4, 5, 11, // 5 70 | 1, 2, 6, // 6 71 | 0, 1, 5, // 7 72 | 0, 1, 3, // 8 73 | 0, 0, 2, // 9 74 | 1, 3, 7, // 10 75 | 4, 7, 11, // 11 76 | 5, 7, 12, // 12 77 | 0, 0, 1, // 13 78 | 0, 0, 3, // 14 79 | 3, 4, 9, // 15 80 | 2, 3, 8, // 16 81 | 1, 1, 5, // 17 82 | 0, 1, 4, // 18 83 | 0, 0, 2, // 19 84 | 4, 5, 8, // 20 85 | 1, 1, 3, // 21 86 | 3, 3, 4, // 22 87 | 0, 0, 0, // 23 88 | 0, 0, 0, // 24 89 | 0, 0, 0, // 25 90 | 0, 0, 0, // 26 91 | 10, 11, 9, // 27 92 | 0, 0, 1, // 28 93 | 0, 0, 0, // 29 94 | 0, 0, 2, // 30 95 | 3, 5, 6, // 31 96 | 0, 0, 1, // 32 97 | 0, 1, 2, // 33 98 | 0, 0, 0, // 34 99 | 1, 1, 2, // 35 100 | 1, 1, 2, // 36 101 | 1, 2, 2, // 37 102 | 0, 1, 1, // 38 103 | 0, 0, 0, // 39 104 | 1, 1, 1, // 40 105 | 1, 0, 1, // 41 106 | 2, 2, 3, // 42 107 | 1, 1, 2, // 43 108 | 0, 0, 0, // 44 109 | 0, 0, 1, // 45 110 | 0, 0, 0, // 46 111 | 0, 1, 4, // 47 112 | 6, 3, 4, // 48 113 | 0, 0, 0, // 49 114 | 0, 0, 1, // 50 115 | 0, 0, 0, // 51 116 | 1, 2, 2, // 52 117 | 1, 1, 2, // 53 118 | 3, 3, 4, // 54 119 | 0, 0, 1, // 55 120 | 3, 4, 6, // 56 121 | 2, 3, 4, // 57 122 | 0, 1, 2, // 58 123 | 1, 2, 3, // 59 124 | // Frame: 2 125 | 0, 0, 2, // 0 126 | 0, 0, 3, // 1 127 | 3, 4, 9, // 2 128 | 2, 2, 6, // 3 129 | 6, 6, 11, // 4 130 | 0, 0, 3, // 5 131 | 1, 1, 6, // 6 132 | 5, 5, 10, // 7 133 | 3, 3, 7, // 8 134 | 1, 2, 5, // 9 135 | 6, 7, 13, // 10 136 | 1, 2, 6, // 11 137 | 0, 0, 2, // 12 138 | 0, 0, 3, // 13 139 | 2, 3, 7, // 14 140 | 3, 4, 8, // 15 141 | 0, 0, 3, // 16 142 | 0, 1, 4, // 17 143 | 1, 1, 5, // 18 144 | 1, 2, 4, // 19 145 | 4, 4, 7, // 20 146 | 0, 0, 1, // 21 147 | 0, 1, 1, // 22 148 | 0, 1, 2, // 23 149 | 0, 0, 0, // 24 150 | 0, 0, 1, // 25 151 | 0, 0, 0, // 26 152 | 0, 2, 3, // 27 153 | 0, 0, 1, // 28 154 | 0, 1, 2, // 29 155 | 1, 2, 3, // 30 156 | 0, 0, 1, // 31 157 | 1, 1, 3, // 32 158 | 0, 0, 1, // 33 159 | 3, 4, 5, // 34 160 | 2, 2, 3, // 35 161 | 0, 0, 1, // 36 162 | 0, 0, 0, // 37 163 | 1, 0, 1, // 38 164 | 0, 0, 0, // 39 165 | 38, 58, 71, // 40 166 | 0, 0, 0, // 41 167 | 0, 1, 3, // 42 168 | 0, 0, 1, // 43 169 | 0, 0, 1, // 44 170 | 0, 1, 3, // 45 171 | 0, 0, 1, // 46 172 | 0, 0, 0, // 47 173 | 0, 0, 1, // 48 174 | 0, 0, 2, // 49 175 | 0, 1, 2, // 50 176 | 2, 1, 2, // 51 177 | 1, 1, 2, // 52 178 | 1, 2, 3, // 53 179 | 0, 0, 1, // 54 180 | 6, 7, 9, // 55 181 | 2, 5, 7, // 56 182 | 0, 0, 1, // 57 183 | 0, 0, 1, // 58 184 | 1, 2, 3, // 59 185 | // Frame: 3 186 | 1, 1, 6, // 0 187 | 0, 1, 4, // 1 188 | 3, 4, 7, // 2 189 | 1, 2, 7, // 3 190 | 0, 1, 3, // 4 191 | 4, 11, 10, // 5 192 | 9, 25, 26, // 6 193 | 3, 14, 13, // 7 194 | 4, 19, 16, // 8 195 | 4, 7, 9, // 9 196 | 11, 43, 32, // 10 197 | 10, 26, 22, // 11 198 | 0, 0, 3, // 12 199 | 0, 0, 4, // 13 200 | 2, 2, 7, // 14 201 | 1, 2, 6, // 15 202 | 0, 0, 3, // 16 203 | 4, 6, 10, // 17 204 | 0, 1, 2, // 18 205 | 0, 1, 2, // 19 206 | 0, 1, 1, // 20 207 | 0, 0, 0, // 21 208 | 0, 0, 0, // 22 209 | 1, 2, 3, // 23 210 | 6, 24, 11, // 24 211 | 5, 11, 6, // 25 212 | 1, 2, 0, // 26 213 | 3, 2, 3, // 27 214 | 1, 2, 3, // 28 215 | 1, 0, 2, // 29 216 | 1, 2, 3, // 30 217 | 0, 0, 0, // 31 218 | 0, 0, 1, // 32 219 | 0, 0, 0, // 33 220 | 1, 0, 2, // 34 221 | 1, 1, 1, // 35 222 | 0, 0, 0, // 36 223 | 0, 0, 0, // 37 224 | 0, 0, 0, // 38 225 | 3, 3, 4, // 39 226 | 0, 0, 0, // 40 227 | 0, 0, 0, // 41 228 | 1, 2, 3, // 42 229 | 0, 0, 1, // 43 230 | 0, 0, 1, // 44 231 | 0, 0, 1, // 45 232 | 0, 1, 2, // 46 233 | 0, 0, 1, // 47 234 | 1, 1, 3, // 48 235 | 0, 1, 2, // 49 236 | 1, 2, 4, // 50 237 | 0, 0, 0, // 51 238 | 1, 1, 2, // 52 239 | 1, 1, 2, // 53 240 | 1, 1, 3, // 54 241 | 9, 10, 11, // 55 242 | 1, 1, 3, // 56 243 | 0, 0, 2, // 57 244 | 1, 1, 2, // 58 245 | 104, 145, 196, // 59 246 | // Frame: 4 247 | 2, 3, 7, // 0 248 | 0, 2, 5, // 1 249 | 28, 46, 42, // 2 250 | 1, 14, 9, // 3 251 | 0, 2, 3, // 4 252 | 3, 13, 15, // 5 253 | 0, 3, 6, // 6 254 | 1, 3, 7, // 7 255 | 0, 0, 1, // 8 256 | 0, 0, 2, // 9 257 | 5, 2, 8, // 10 258 | 4, 4, 9, // 11 259 | 3, 4, 8, // 12 260 | 0, 0, 3, // 13 261 | 2, 2, 6, // 14 262 | 0, 1, 3, // 15 263 | 4, 5, 8, // 16 264 | 0, 0, 1, // 17 265 | 1, 0, 1, // 18 266 | 0, 0, 0, // 19 267 | 2, 10, 2, // 20 268 | 0, 3, 0, // 21 269 | 1, 0, 6, // 22 270 | 0, 0, 0, // 23 271 | 0, 0, 0, // 24 272 | 0, 40, 16, // 25 273 | 5, 57, 22, // 26 274 | 27, 69, 46, // 27 275 | 0, 0, 0, // 28 276 | 0, 0, 0, // 29 277 | 0, 0, 0, // 30 278 | 8, 7, 7, // 31 279 | 0, 0, 0, // 32 280 | 2, 8, 5, // 33 281 | 0, 0, 0, // 34 282 | 0, 0, 0, // 35 283 | 0, 0, 0, // 36 284 | 0, 0, 0, // 37 285 | 0, 0, 0, // 38 286 | 0, 0, 0, // 39 287 | 1, 0, 1, // 40 288 | 3, 2, 3, // 41 289 | 6, 7, 8, // 42 290 | 0, 0, 1, // 43 291 | 0, 0, 0, // 44 292 | 0, 0, 0, // 45 293 | 6, 6, 8, // 46 294 | 3, 3, 5, // 47 295 | 7, 7, 10, // 48 296 | 1, 2, 4, // 49 297 | 0, 0, 1, // 50 298 | 0, 0, 0, // 51 299 | 0, 0, 0, // 52 300 | 0, 1, 1, // 53 301 | 7, 7, 8, // 54 302 | 0, 0, 0, // 55 303 | 2, 2, 4, // 56 304 | 0, 1, 2, // 57 305 | 6, 5, 7, // 58 306 | 0, 0, 1, // 59 307 | // Frame: 5 308 | 3, 7, 8, // 0 309 | 11, 28, 21, // 1 310 | 0, 7, 4, // 2 311 | 0, 11, 9, // 3 312 | 0, 3, 2, // 4 313 | 6, 13, 16, // 5 314 | 3, 7, 11, // 6 315 | 0, 1, 4, // 7 316 | 0, 0, 0, // 8 317 | 0, 0, 2, // 9 318 | 1, 3, 5, // 10 319 | 0, 3, 7, // 11 320 | 2, 2, 5, // 12 321 | 2, 7, 8, // 13 322 | 0, 0, 2, // 14 323 | 1, 1, 4, // 15 324 | 6, 9, 13, // 16 325 | 0, 0, 2, // 17 326 | 0, 0, 1, // 18 327 | 0, 0, 0, // 19 328 | 94, 237, 16, // 20 329 | 95, 230, 2, // 21 330 | 69, 170, 9, // 22 331 | 18, 47, 4, // 23 332 | 0, 5, 0, // 24 333 | 3, 41, 13, // 25 334 | 3, 58, 19, // 26 335 | 9, 71, 33, // 27 336 | 6, 55, 24, // 28 337 | 0, 1, 0, // 29 338 | 0, 0, 0, // 30 339 | 0, 4, 3, // 31 340 | 1, 9, 7, // 32 341 | 0, 0, 0, // 33 342 | 1, 0, 1, // 34 343 | 0, 0, 0, // 35 344 | 0, 0, 0, // 36 345 | 0, 0, 0, // 37 346 | 0, 0, 0, // 38 347 | 1, 0, 1, // 39 348 | 0, 0, 1, // 40 349 | 2, 3, 4, // 41 350 | 0, 1, 2, // 42 351 | 1, 1, 3, // 43 352 | 0, 0, 0, // 44 353 | 0, 0, 1, // 45 354 | 7, 8, 10, // 46 355 | 2, 3, 5, // 47 356 | 3, 3, 5, // 48 357 | 0, 0, 0, // 49 358 | 5, 6, 6, // 50 359 | 2, 2, 2, // 51 360 | 0, 0, 0, // 52 361 | 1, 1, 1, // 53 362 | 5, 5, 6, // 54 363 | 0, 0, 0, // 55 364 | 1, 2, 3, // 56 365 | 1, 2, 3, // 57 366 | 1, 1, 3, // 58 367 | 0, 1, 2, // 59 368 | // Frame: 6 369 | 3, 44, 26, // 0 370 | 2, 32, 20, // 1 371 | 16, 79, 55, // 2 372 | 15, 70, 47, // 3 373 | 1, 24, 14, // 4 374 | 5, 17, 15, // 5 375 | 9, 30, 32, // 6 376 | 1, 6, 7, // 7 377 | 0, 4, 2, // 8 378 | 12, 37, 26, // 9 379 | 15, 65, 46, // 10 380 | 0, 3, 6, // 11 381 | 0, 0, 3, // 12 382 | 9, 60, 40, // 13 383 | 1, 3, 6, // 14 384 | 0, 2, 5, // 15 385 | 0, 1, 4, // 16 386 | 1, 1, 5, // 17 387 | 0, 0, 1, // 18 388 | 0, 0, 0, // 19 389 | 90, 220, 17, // 20 390 | 2, 3, 3, // 21 391 | 1, 1, 0, // 22 392 | 0, 2, 0, // 23 393 | 0, 3, 0, // 24 394 | 41, 125, 1, // 25 395 | 9, 45, 20, // 26 396 | 11, 62, 26, // 27 397 | 7, 60, 31, // 28 398 | 2, 71, 32, // 29 399 | 0, 0, 0, // 30 400 | 1, 0, 1, // 31 401 | 0, 0, 0, // 32 402 | 4, 7, 4, // 33 403 | 0, 0, 0, // 34 404 | 0, 0, 0, // 35 405 | 0, 0, 0, // 36 406 | 3, 2, 3, // 37 407 | 0, 0, 0, // 38 408 | 13, 17, 15, // 39 409 | 49, 71, 59, // 40 410 | 1, 2, 3, // 41 411 | 0, 0, 2, // 42 412 | 4, 4, 6, // 43 413 | 0, 0, 1, // 44 414 | 0, 0, 0, // 45 415 | 1, 2, 4, // 46 416 | 0, 0, 2, // 47 417 | 0, 0, 0, // 48 418 | 0, 0, 2, // 49 419 | 0, 0, 1, // 50 420 | 0, 0, 0, // 51 421 | 2, 2, 2, // 52 422 | 0, 0, 1, // 53 423 | 2, 2, 3, // 54 424 | 0, 0, 1, // 55 425 | 1, 2, 3, // 56 426 | 1, 1, 3, // 57 427 | 3, 4, 5, // 58 428 | 0, 0, 1, // 59 429 | // Frame: 7 430 | 10, 115, 62, // 0 431 | 1, 26, 12, // 1 432 | 0, 52, 17, // 2 433 | 15, 128, 68, // 3 434 | 0, 38, 15, // 4 435 | 20, 86, 58, // 5 436 | 4, 45, 24, // 6 437 | 44, 115, 92, // 7 438 | 17, 111, 68, // 8 439 | 11, 64, 37, // 9 440 | 3, 79, 36, // 10 441 | 0, 3, 2, // 11 442 | 0, 5, 3, // 12 443 | 31, 106, 80, // 13 444 | 2, 7, 10, // 14 445 | 4, 4, 8, // 15 446 | 1, 0, 2, // 16 447 | 1, 9, 11, // 17 448 | 2, 4, 6, // 18 449 | 96, 167, 32, // 19 450 | 0, 2, 0, // 20 451 | 0, 0, 1, // 21 452 | 0, 1, 1, // 22 453 | 1, 1, 1, // 23 454 | 1, 9, 4, // 24 455 | 3, 38, 14, // 25 456 | 79, 205, 7, // 26 457 | 1, 43, 12, // 27 458 | 9, 69, 34, // 28 459 | 7, 64, 26, // 29 460 | 5, 80, 36, // 30 461 | 8, 27, 13, // 31 462 | 0, 1, 0, // 32 463 | 0, 1, 0, // 33 464 | 0, 1, 1, // 34 465 | 0, 2, 1, // 35 466 | 0, 4, 1, // 36 467 | 0, 0, 0, // 37 468 | 3, 4, 4, // 38 469 | 2, 3, 3, // 39 470 | 2, 3, 3, // 40 471 | 0, 0, 0, // 41 472 | 0, 0, 0, // 42 473 | 2, 3, 4, // 43 474 | 1, 5, 6, // 44 475 | 5, 5, 6, // 45 476 | 0, 0, 0, // 46 477 | 0, 0, 0, // 47 478 | 0, 0, 1, // 48 479 | 3, 4, 5, // 49 480 | 0, 1, 2, // 50 481 | 1, 1, 3, // 51 482 | 0, 0, 0, // 52 483 | 0, 0, 1, // 53 484 | 0, 0, 0, // 54 485 | 3, 4, 5, // 55 486 | 0, 0, 1, // 56 487 | 0, 0, 1, // 57 488 | 0, 0, 0, // 58 489 | 1, 1, 2, // 59 490 | // Frame: 8 491 | 7, 8, 9, // 0 492 | 60, 134, 98, // 1 493 | 49, 167, 119, // 2 494 | 18, 145, 79, // 3 495 | 25, 141, 88, // 4 496 | 10, 144, 75, // 5 497 | 49, 215, 143, // 6 498 | 38, 203, 129, // 7 499 | 9, 95, 48, // 8 500 | 8, 57, 31, // 9 501 | 21, 125, 72, // 10 502 | 0, 7, 1, // 11 503 | 12, 47, 31, // 12 504 | 23, 116, 77, // 13 505 | 3, 1, 5, // 14 506 | 2, 1, 4, // 15 507 | 2, 6, 8, // 16 508 | 1, 5, 6, // 17 509 | 1, 2, 3, // 18 510 | 129, 198, 48, // 19 511 | 1, 2, 0, // 20 512 | 0, 20, 10, // 21 513 | 4, 15, 7, // 22 514 | 0, 1, 0, // 23 515 | 11, 30, 17, // 24 516 | 2, 30, 14, // 25 517 | 8, 58, 17, // 26 518 | 36, 132, 28, // 27 519 | 9, 60, 29, // 28 520 | 7, 73, 32, // 29 521 | 7, 75, 34, // 30 522 | 0, 0, 0, // 31 523 | 1, 2, 1, // 32 524 | 2, 2, 2, // 33 525 | 0, 0, 0, // 34 526 | 0, 1, 1, // 35 527 | 1, 0, 2, // 36 528 | 0, 0, 1, // 37 529 | 0, 0, 0, // 38 530 | 0, 0, 0, // 39 531 | 0, 0, 0, // 40 532 | 0, 0, 0, // 41 533 | 1, 1, 3, // 42 534 | 1, 2, 3, // 43 535 | 0, 0, 0, // 44 536 | 0, 0, 2, // 45 537 | 153, 163, 181, // 46 538 | 1, 3, 3, // 47 539 | 1, 2, 5, // 48 540 | 1, 1, 3, // 49 541 | 1, 1, 1, // 50 542 | 0, 0, 1, // 51 543 | 1, 2, 1, // 52 544 | 1, 1, 2, // 53 545 | 11, 16, 15, // 54 546 | 0, 0, 0, // 55 547 | 0, 0, 1, // 56 548 | 0, 1, 2, // 57 549 | 0, 0, 1, // 58 550 | 0, 0, 0, // 59 551 | // Frame: 9 552 | 4, 0, 6, // 0 553 | 3, 2, 5, // 1 554 | 36, 187, 114, // 2 555 | 0, 11, 3, // 3 556 | 58, 197, 132, // 4 557 | 17, 138, 77, // 5 558 | 38, 221, 125, // 6 559 | 22, 166, 95, // 7 560 | 0, 77, 32, // 8 561 | 42, 110, 79, // 9 562 | 12, 47, 29, // 10 563 | 18, 93, 51, // 11 564 | 5, 5, 4, // 12 565 | 0, 3, 1, // 13 566 | 9, 24, 22, // 14 567 | 0, 4, 3, // 15 568 | 0, 3, 3, // 16 569 | 0, 1, 1, // 17 570 | 7, 20, 18, // 18 571 | 9, 33, 2, // 19 572 | 5, 6, 9, // 20 573 | 3, 4, 1, // 21 574 | 12, 27, 18, // 22 575 | 15, 107, 55, // 23 576 | 5, 87, 37, // 24 577 | 7, 65, 32, // 25 578 | 8, 75, 27, // 26 579 | 100, 232, 29, // 27 580 | 7, 57, 29, // 28 581 | 7, 59, 28, // 29 582 | 5, 80, 36, // 30 583 | 1, 69, 24, // 31 584 | 1, 16, 8, // 32 585 | 1, 4, 1, // 33 586 | 0, 0, 0, // 34 587 | 0, 0, 1, // 35 588 | 0, 1, 4, // 36 589 | 0, 0, 1, // 37 590 | 0, 0, 0, // 38 591 | 0, 0, 0, // 39 592 | 0, 0, 0, // 40 593 | 0, 0, 0, // 41 594 | 2, 2, 3, // 42 595 | 1, 1, 2, // 43 596 | 0, 1, 2, // 44 597 | 0, 0, 1, // 45 598 | 0, 4, 9, // 46 599 | 3, 3, 5, // 47 600 | 0, 2, 1, // 48 601 | 23, 130, 192, // 49 602 | 0, 0, 3, // 50 603 | 1, 1, 2, // 51 604 | 0, 0, 0, // 52 605 | 1, 1, 2, // 53 606 | 2, 2, 3, // 54 607 | 0, 0, 1, // 55 608 | 1, 1, 2, // 56 609 | 3, 3, 4, // 57 610 | 2, 2, 3, // 58 611 | 0, 0, 1, // 59 612 | // Frame: 10 613 | 0, 1, 5, // 0 614 | 0, 0, 2, // 1 615 | 1, 6, 9, // 2 616 | 1, 4, 4, // 3 617 | 28, 210, 125, // 4 618 | 18, 128, 72, // 5 619 | 54, 221, 154, // 6 620 | 0, 50, 17, // 7 621 | 50, 220, 138, // 8 622 | 44, 36, 34, // 9 623 | 0, 2, 1, // 10 624 | 26, 163, 88, // 11 625 | 24, 76, 48, // 12 626 | 0, 8, 4, // 13 627 | 0, 13, 7, // 14 628 | 0, 4, 2, // 15 629 | 0, 0, 0, // 16 630 | 0, 1, 1, // 17 631 | 0, 17, 5, // 18 632 | 7, 12, 4, // 19 633 | 0, 1, 0, // 20 634 | 1, 0, 0, // 21 635 | 0, 0, 0, // 22 636 | 4, 110, 47, // 23 637 | 39, 255, 149, // 24 638 | 43, 197, 112, // 25 639 | 0, 32, 10, // 26 640 | 26, 99, 19, // 27 641 | 0, 36, 13, // 28 642 | 20, 86, 48, // 29 643 | 51, 161, 104, // 30 644 | 11, 94, 41, // 31 645 | 105, 143, 124, // 32 646 | 0, 0, 1, // 33 647 | 3, 1, 3, // 34 648 | 0, 0, 1, // 35 649 | 2, 1, 1, // 36 650 | 0, 0, 0, // 37 651 | 0, 0, 0, // 38 652 | 0, 0, 0, // 39 653 | 2, 3, 3, // 40 654 | 0, 0, 0, // 41 655 | 0, 0, 1, // 42 656 | 0, 0, 1, // 43 657 | 1, 2, 4, // 44 658 | 3, 2, 5, // 45 659 | 0, 0, 1, // 46 660 | 0, 3, 3, // 47 661 | 0, 2, 6, // 48 662 | 6, 13, 10, // 49 663 | 1, 2, 1, // 50 664 | 0, 0, 1, // 51 665 | 0, 0, 0, // 52 666 | 0, 0, 1, // 53 667 | 0, 0, 1, // 54 668 | 2, 3, 3, // 55 669 | 0, 0, 0, // 56 670 | 0, 0, 0, // 57 671 | 0, 0, 0, // 58 672 | 3, 4, 5, // 59 673 | // Frame: 11 674 | 0, 0, 2, // 0 675 | 0, 1, 4, // 1 676 | 3, 5, 10, // 2 677 | 2, 5, 10, // 3 678 | 1, 4, 9, // 4 679 | 0, 3, 2, // 5 680 | 46, 247, 140, // 6 681 | 29, 170, 94, // 7 682 | 12, 70, 27, // 8 683 | 0, 11, 5, // 9 684 | 0, 6, 0, // 10 685 | 26, 39, 30, // 11 686 | 4, 40, 13, // 12 687 | 12, 41, 30, // 13 688 | 0, 14, 3, // 14 689 | 0, 9, 3, // 15 690 | 0, 9, 2, // 16 691 | 12, 38, 18, // 17 692 | 2, 21, 8, // 18 693 | 0, 1, 0, // 19 694 | 58, 119, 21, // 20 695 | 6, 3, 13, // 21 696 | 0, 0, 1, // 22 697 | 40, 120, 74, // 23 698 | 23, 255, 140, // 24 699 | 33, 247, 131, // 25 700 | 2, 55, 22, // 26 701 | 23, 111, 40, // 27 702 | 17, 110, 53, // 28 703 | 7, 75, 34, // 29 704 | 9, 68, 29, // 30 705 | 1, 90, 32, // 31 706 | 6, 37, 19, // 32 707 | 0, 12, 6, // 33 708 | 16, 31, 20, // 34 709 | 0, 0, 0, // 35 710 | 0, 0, 0, // 36 711 | 0, 0, 0, // 37 712 | 0, 0, 0, // 38 713 | 0, 1, 2, // 39 714 | 1, 1, 2, // 40 715 | 0, 0, 0, // 41 716 | 0, 0, 0, // 42 717 | 3, 5, 5, // 43 718 | 1, 2, 4, // 44 719 | 1, 2, 4, // 45 720 | 0, 1, 3, // 46 721 | 0, 0, 1, // 47 722 | 0, 0, 0, // 48 723 | 0, 1, 1, // 49 724 | 0, 0, 0, // 50 725 | 4, 3, 2, // 51 726 | 0, 0, 0, // 52 727 | 0, 0, 0, // 53 728 | 2, 3, 4, // 54 729 | 1, 2, 2, // 55 730 | 0, 1, 4, // 56 731 | 0, 0, 2, // 57 732 | 0, 0, 0, // 58 733 | 1, 0, 1, // 59 734 | // Frame: 12 735 | 2, 5, 9, // 0 736 | 1, 3, 7, // 1 737 | 0, 1, 6, // 2 738 | 3, 5, 10, // 3 739 | 1, 2, 6, // 4 740 | 2, 1, 4, // 5 741 | 0, 2, 4, // 6 742 | 5, 6, 6, // 7 743 | 29, 170, 99, // 8 744 | 30, 126, 64, // 9 745 | 100, 176, 151, // 10 746 | 0, 33, 9, // 11 747 | 26, 58, 33, // 12 748 | 7, 30, 16, // 13 749 | 10, 62, 31, // 14 750 | 33, 54, 37, // 15 751 | 5, 16, 6, // 16 752 | 15, 42, 22, // 17 753 | 6, 49, 24, // 18 754 | 6, 5, 7, // 19 755 | 93, 189, 10, // 20 756 | 14, 7, 9, // 21 757 | 3, 0, 3, // 22 758 | 0, 1, 0, // 23 759 | 19, 200, 99, // 24 760 | 16, 179, 83, // 25 761 | 9, 104, 53, // 26 762 | 26, 124, 41, // 27 763 | 13, 124, 59, // 28 764 | 9, 73, 38, // 29 765 | 22, 85, 51, // 30 766 | 30, 65, 48, // 31 767 | 10, 155, 75, // 32 768 | 2, 9, 5, // 33 769 | 1, 6, 2, // 34 770 | 0, 0, 0, // 35 771 | 0, 2, 3, // 36 772 | 0, 0, 0, // 37 773 | 0, 0, 0, // 38 774 | 0, 1, 1, // 39 775 | 1, 2, 3, // 40 776 | 0, 1, 2, // 41 777 | 14, 16, 17, // 42 778 | 2, 2, 4, // 43 779 | 1, 1, 3, // 44 780 | 0, 1, 2, // 45 781 | 0, 2, 3, // 46 782 | 0, 0, 0, // 47 783 | 0, 0, 0, // 48 784 | 2, 3, 3, // 49 785 | 1, 1, 1, // 50 786 | 3, 15, 20, // 51 787 | 2, 2, 3, // 52 788 | 0, 0, 0, // 53 789 | 0, 0, 0, // 54 790 | 1, 1, 2, // 55 791 | 0, 0, 2, // 56 792 | 0, 4, 4, // 57 793 | 2, 3, 3, // 58 794 | 0, 0, 0, // 59 795 | // Frame: 13 796 | 5, 7, 12, // 0 797 | 1, 3, 7, // 1 798 | 0, 0, 2, // 2 799 | 0, 0, 2, // 3 800 | 0, 0, 3, // 4 801 | 11, 15, 20, // 5 802 | 4, 8, 13, // 6 803 | 0, 2, 2, // 7 804 | 1, 4, 4, // 8 805 | 0, 21, 6, // 9 806 | 13, 102, 51, // 10 807 | 39, 133, 88, // 11 808 | 39, 113, 71, // 12 809 | 0, 21, 6, // 13 810 | 0, 6, 1, // 14 811 | 0, 2, 0, // 15 812 | 0, 28, 6, // 16 813 | 40, 182, 114, // 17 814 | 35, 93, 59, // 18 815 | 0, 0, 0, // 19 816 | 130, 213, 44, // 20 817 | 18, 11, 16, // 21 818 | 11, 3, 10, // 22 819 | 0, 0, 0, // 23 820 | 27, 138, 81, // 24 821 | 19, 167, 83, // 25 822 | 34, 218, 110, // 26 823 | 30, 130, 58, // 27 824 | 0, 51, 18, // 28 825 | 4, 53, 22, // 29 826 | 0, 29, 11, // 30 827 | 16, 104, 56, // 31 828 | 7, 101, 48, // 32 829 | 8, 7, 8, // 33 830 | 0, 0, 0, // 34 831 | 0, 0, 0, // 35 832 | 0, 0, 0, // 36 833 | 0, 0, 1, // 37 834 | 0, 0, 0, // 38 835 | 0, 0, 0, // 39 836 | 0, 0, 0, // 40 837 | 3, 4, 5, // 41 838 | 5, 5, 6, // 42 839 | 3, 3, 5, // 43 840 | 0, 0, 1, // 44 841 | 0, 0, 0, // 45 842 | 0, 1, 3, // 46 843 | 4, 3, 5, // 47 844 | 6, 6, 7, // 48 845 | 0, 0, 0, // 49 846 | 1, 1, 1, // 50 847 | 0, 0, 0, // 51 848 | 3, 4, 4, // 52 849 | 0, 0, 0, // 53 850 | 1, 1, 1, // 54 851 | 0, 0, 0, // 55 852 | 1, 1, 2, // 56 853 | 3, 3, 3, // 57 854 | 0, 0, 0, // 58 855 | 0, 0, 1, // 59 856 | // Frame: 14 857 | 3, 7, 13, // 0 858 | 0, 1, 6, // 1 859 | 2, 3, 7, // 2 860 | 0, 2, 4, // 3 861 | 4, 4, 10, // 4 862 | 0, 1, 4, // 5 863 | 0, 0, 2, // 6 864 | 3, 10, 14, // 7 865 | 0, 2, 1, // 8 866 | 1, 17, 7, // 9 867 | 17, 66, 39, // 10 868 | 6, 67, 33, // 11 869 | 12, 65, 41, // 12 870 | 8, 30, 19, // 13 871 | 17, 38, 20, // 14 872 | 0, 22, 6, // 15 873 | 16, 48, 27, // 16 874 | 4, 18, 12, // 17 875 | 0, 1, 1, // 18 876 | 70, 120, 114, // 19 877 | 0, 2, 0, // 20 878 | 0, 0, 0, // 21 879 | 13, 0, 0, // 22 880 | 21, 7, 5, // 23 881 | 41, 143, 79, // 24 882 | 38, 247, 140, // 25 883 | 9, 115, 31, // 26 884 | 33, 145, 14, // 27 885 | 2, 63, 21, // 28 886 | 1, 47, 22, // 29 887 | 33, 161, 132, // 30 888 | 11, 79, 44, // 31 889 | 12, 82, 38, // 32 890 | 0, 1, 0, // 33 891 | 0, 0, 0, // 34 892 | 0, 0, 1, // 35 893 | 0, 0, 0, // 36 894 | 0, 0, 0, // 37 895 | 1, 2, 3, // 38 896 | 0, 0, 2, // 39 897 | 31, 32, 36, // 40 898 | 0, 0, 1, // 41 899 | 0, 0, 0, // 42 900 | 0, 0, 0, // 43 901 | 4, 4, 6, // 44 902 | 1, 2, 4, // 45 903 | 0, 0, 1, // 46 904 | 0, 0, 1, // 47 905 | 0, 0, 0, // 48 906 | 1, 1, 3, // 49 907 | 0, 0, 0, // 50 908 | 1, 2, 2, // 51 909 | 0, 0, 0, // 52 910 | 0, 0, 0, // 53 911 | 0, 0, 0, // 54 912 | 0, 0, 1, // 55 913 | 0, 0, 0, // 56 914 | 0, 0, 0, // 57 915 | 0, 0, 0, // 58 916 | 0, 0, 0, // 59 917 | // Frame: 15 918 | 11, 28, 41, // 0 919 | 18, 52, 98, // 1 920 | 5, 11, 17, // 2 921 | 2, 5, 8, // 3 922 | 2, 5, 6, // 4 923 | 0, 0, 1, // 5 924 | 0, 0, 2, // 6 925 | 1, 4, 8, // 7 926 | 4, 10, 11, // 8 927 | 8, 39, 31, // 9 928 | 11, 158, 83, // 10 929 | 0, 6, 2, // 11 930 | 0, 9, 4, // 12 931 | 0, 5, 0, // 13 932 | 1, 1, 0, // 14 933 | 0, 26, 3, // 15 934 | 3, 38, 16, // 16 935 | 3, 63, 29, // 17 936 | 0, 50, 17, // 18 937 | 11, 56, 27, // 19 938 | 1, 29, 8, // 20 939 | 83, 175, 53, // 21 940 | 36, 72, 48, // 22 941 | 90, 101, 51, // 23 942 | 57, 96, 58, // 24 943 | 21, 84, 46, // 25 944 | 58, 164, 30, // 26 945 | 2, 42, 12, // 27 946 | 0, 5, 1, // 28 947 | 13, 96, 60, // 29 948 | 15, 105, 51, // 30 949 | 1, 49, 19, // 31 950 | 9, 82, 37, // 32 951 | 45, 111, 72, // 33 952 | 3, 2, 4, // 34 953 | 1, 2, 3, // 35 954 | 0, 2, 5, // 36 955 | 0, 0, 0, // 37 956 | 0, 1, 3, // 38 957 | 0, 1, 3, // 39 958 | 1, 1, 2, // 40 959 | 0, 0, 1, // 41 960 | 0, 0, 0, // 42 961 | 0, 0, 2, // 43 962 | 0, 0, 0, // 44 963 | 0, 1, 3, // 45 964 | 0, 0, 0, // 46 965 | 9, 14, 15, // 47 966 | 0, 0, 0, // 48 967 | 3, 4, 5, // 49 968 | 23, 27, 27, // 50 969 | 0, 0, 0, // 51 970 | 0, 0, 0, // 52 971 | 0, 1, 1, // 53 972 | 0, 0, 0, // 54 973 | 0, 0, 0, // 55 974 | 0, 0, 0, // 56 975 | 0, 0, 0, // 57 976 | 0, 0, 0, // 58 977 | 2, 2, 2, // 59 978 | // Frame: 16 979 | 13, 24, 30, // 0 980 | 0, 0, 3, // 1 981 | 3, 5, 7, // 2 982 | 5, 7, 13, // 3 983 | 0, 4, 9, // 4 984 | 0, 1, 3, // 5 985 | 0, 10, 16, // 6 986 | 2, 4, 5, // 7 987 | 4, 6, 13, // 8 988 | 5, 42, 28, // 9 989 | 15, 52, 35, // 10 990 | 26, 128, 76, // 11 991 | 32, 116, 74, // 12 992 | 12, 60, 34, // 13 993 | 1, 16, 5, // 14 994 | 36, 117, 95, // 15 995 | 3, 37, 17, // 16 996 | 8, 111, 52, // 17 997 | 50, 255, 157, // 18 998 | 30, 185, 106, // 19 999 | 3, 83, 36, // 20 1000 | 3, 46, 12, // 21 1001 | 45, 91, 32, // 22 1002 | 25, 39, 11, // 23 1003 | 63, 105, 33, // 24 1004 | 76, 128, 37, // 25 1005 | 39, 145, 71, // 26 1006 | 9, 86, 32, // 27 1007 | 28, 96, 54, // 28 1008 | 0, 10, 3, // 29 1009 | 46, 164, 90, // 30 1010 | 2, 20, 7, // 31 1011 | 5, 100, 42, // 32 1012 | 2, 5, 6, // 33 1013 | 10, 18, 23, // 34 1014 | 0, 0, 0, // 35 1015 | 14, 16, 15, // 36 1016 | 0, 0, 0, // 37 1017 | 10, 12, 13, // 38 1018 | 0, 0, 1, // 39 1019 | 1, 1, 3, // 40 1020 | 5, 8, 11, // 41 1021 | 0, 0, 0, // 42 1022 | 0, 1, 3, // 43 1023 | 2, 3, 4, // 44 1024 | 0, 0, 1, // 45 1025 | 0, 0, 0, // 46 1026 | 0, 0, 0, // 47 1027 | 0, 0, 0, // 48 1028 | 4, 3, 6, // 49 1029 | 0, 0, 0, // 50 1030 | 0, 0, 0, // 51 1031 | 0, 0, 0, // 52 1032 | 1, 2, 3, // 53 1033 | 0, 0, 0, // 54 1034 | 0, 0, 1, // 55 1035 | 0, 0, 0, // 56 1036 | 0, 0, 0, // 57 1037 | 0, 0, 0, // 58 1038 | 2, 2, 4, // 59 1039 | // Frame: 17 1040 | 2, 3, 7, // 0 1041 | 6, 8, 12, // 1 1042 | 0, 0, 2, // 2 1043 | 0, 1, 3, // 3 1044 | 1, 2, 7, // 4 1045 | 5, 6, 9, // 5 1046 | 2, 6, 9, // 6 1047 | 0, 0, 4, // 7 1048 | 1, 4, 9, // 8 1049 | 24, 125, 84, // 9 1050 | 19, 79, 51, // 10 1051 | 67, 147, 117, // 11 1052 | 17, 100, 59, // 12 1053 | 36, 92, 62, // 13 1054 | 0, 7, 2, // 14 1055 | 0, 35, 10, // 15 1056 | 13, 62, 35, // 16 1057 | 4, 72, 32, // 17 1058 | 9, 147, 70, // 18 1059 | 31, 247, 129, // 19 1060 | 29, 249, 132, // 20 1061 | 41, 247, 142, // 21 1062 | 48, 220, 47, // 22 1063 | 45, 230, 94, // 23 1064 | 57, 182, 74, // 24 1065 | 59, 133, 73, // 25 1066 | 77, 154, 82, // 26 1067 | 60, 169, 89, // 27 1068 | 47, 192, 106, // 28 1069 | 12, 120, 54, // 29 1070 | 17, 145, 73, // 30 1071 | 15, 148, 75, // 31 1072 | 3, 35, 16, // 32 1073 | 2, 1, 4, // 33 1074 | 0, 0, 0, // 34 1075 | 2, 3, 4, // 35 1076 | 2, 2, 4, // 36 1077 | 20, 20, 24, // 37 1078 | 0, 0, 1, // 38 1079 | 1, 2, 4, // 39 1080 | 0, 1, 2, // 40 1081 | 3, 3, 5, // 41 1082 | 9, 9, 13, // 42 1083 | 0, 0, 1, // 43 1084 | 0, 0, 2, // 44 1085 | 0, 0, 0, // 45 1086 | 3, 3, 5, // 46 1087 | 3, 4, 6, // 47 1088 | 1, 2, 4, // 48 1089 | 0, 0, 0, // 49 1090 | 3, 4, 3, // 50 1091 | 0, 0, 0, // 51 1092 | 0, 0, 0, // 52 1093 | 1, 1, 1, // 53 1094 | 0, 0, 0, // 54 1095 | 0, 0, 0, // 55 1096 | 48, 134, 127, // 56 1097 | 0, 0, 0, // 57 1098 | 0, 0, 0, // 58 1099 | 0, 0, 0, // 59 1100 | // Frame: 18 1101 | 3, 11, 20, // 0 1102 | 6, 4, 12, // 1 1103 | 1, 4, 8, // 2 1104 | 0, 0, 3, // 3 1105 | 1, 4, 9, // 4 1106 | 0, 3, 7, // 5 1107 | 1, 4, 8, // 6 1108 | 1, 4, 7, // 7 1109 | 0, 2, 4, // 8 1110 | 9, 33, 27, // 9 1111 | 5, 49, 27, // 10 1112 | 62, 247, 179, // 11 1113 | 20, 175, 114, // 12 1114 | 2, 58, 27, // 13 1115 | 9, 49, 26, // 14 1116 | 5, 72, 37, // 15 1117 | 12, 178, 94, // 16 1118 | 16, 158, 84, // 17 1119 | 55, 237, 148, // 18 1120 | 33, 213, 121, // 19 1121 | 37, 255, 140, // 20 1122 | 33, 242, 131, // 21 1123 | 38, 246, 125, // 22 1124 | 44, 237, 107, // 23 1125 | 40, 223, 146, // 24 1126 | 36, 216, 102, // 25 1127 | 50, 161, 81, // 26 1128 | 81, 150, 81, // 27 1129 | 59, 144, 72, // 28 1130 | 43, 193, 100, // 29 1131 | 36, 235, 127, // 30 1132 | 17, 203, 99, // 31 1133 | 2, 23, 12, // 32 1134 | 0, 1, 2, // 33 1135 | 0, 0, 0, // 34 1136 | 0, 0, 0, // 35 1137 | 0, 1, 3, // 36 1138 | 23, 26, 29, // 37 1139 | 0, 0, 2, // 38 1140 | 1, 3, 5, // 39 1141 | 0, 0, 0, // 40 1142 | 0, 0, 2, // 41 1143 | 2, 3, 6, // 42 1144 | 1, 3, 4, // 43 1145 | 0, 1, 3, // 44 1146 | 1, 1, 3, // 45 1147 | 0, 0, 3, // 46 1148 | 9, 10, 13, // 47 1149 | 1, 1, 2, // 48 1150 | 0, 0, 1, // 49 1151 | 0, 0, 0, // 50 1152 | 1, 10, 10, // 51 1153 | 1, 1, 1, // 52 1154 | 0, 0, 0, // 53 1155 | 0, 0, 1, // 54 1156 | 0, 0, 0, // 55 1157 | 0, 0, 0, // 56 1158 | 0, 0, 0, // 57 1159 | 0, 0, 0, // 58 1160 | 0, 0, 0, // 59 1161 | // Frame: 19 1162 | 0, 7, 15, // 0 1163 | 2, 2, 6, // 1 1164 | 4, 8, 14, // 2 1165 | 10, 12, 18, // 3 1166 | 3, 6, 11, // 4 1167 | 0, 0, 2, // 5 1168 | 1, 2, 6, // 6 1169 | 1, 3, 9, // 7 1170 | 17, 18, 26, // 8 1171 | 6, 8, 11, // 9 1172 | 49, 117, 89, // 10 1173 | 26, 161, 90, // 11 1174 | 79, 240, 149, // 12 1175 | 33, 138, 88, // 13 1176 | 18, 116, 74, // 14 1177 | 9, 98, 55, // 15 1178 | 9, 87, 47, // 16 1179 | 58, 220, 146, // 17 1180 | 20, 82, 57, // 18 1181 | 33, 160, 99, // 19 1182 | 16, 184, 88, // 20 1183 | 36, 228, 131, // 21 1184 | 51, 239, 88, // 22 1185 | 47, 246, 72, // 23 1186 | 62, 221, 50, // 24 1187 | 53, 233, 93, // 25 1188 | 33, 244, 118, // 26 1189 | 55, 181, 100, // 27 1190 | 71, 141, 76, // 28 1191 | 66, 138, 70, // 29 1192 | 56, 176, 94, // 30 1193 | 45, 221, 117, // 31 1194 | 15, 13, 13, // 32 1195 | 0, 0, 0, // 33 1196 | 0, 0, 0, // 34 1197 | 0, 0, 0, // 35 1198 | 0, 0, 1, // 36 1199 | 0, 0, 1, // 37 1200 | 3, 4, 6, // 38 1201 | 1, 3, 5, // 39 1202 | 1, 2, 5, // 40 1203 | 1, 1, 3, // 41 1204 | 0, 0, 0, // 42 1205 | 11, 20, 23, // 43 1206 | 2, 3, 4, // 44 1207 | 14, 15, 17, // 45 1208 | 0, 0, 0, // 46 1209 | 1, 2, 4, // 47 1210 | 0, 0, 0, // 48 1211 | 2, 3, 3, // 49 1212 | 9, 10, 11, // 50 1213 | 7, 6, 7, // 51 1214 | 0, 0, 0, // 52 1215 | 0, 0, 0, // 53 1216 | 0, 0, 0, // 54 1217 | 0, 1, 1, // 55 1218 | 0, 1, 0, // 56 1219 | 0, 0, 1, // 57 1220 | 0, 0, 0, // 58 1221 | 1, 2, 3, // 59 1222 | // Frame: 20 1223 | 1, 2, 6, // 0 1224 | 0, 1, 5, // 1 1225 | 0, 0, 1, // 2 1226 | 6, 6, 10, // 3 1227 | 0, 2, 7, // 4 1228 | 2, 4, 9, // 5 1229 | 3, 5, 10, // 6 1230 | 5, 9, 13, // 7 1231 | 1, 9, 15, // 8 1232 | 0, 0, 1, // 9 1233 | 1, 2, 3, // 10 1234 | 17, 55, 41, // 11 1235 | 0, 9, 4, // 12 1236 | 1, 28, 12, // 13 1237 | 18, 130, 73, // 14 1238 | 33, 178, 110, // 15 1239 | 0, 1, 3, // 16 1240 | 18, 69, 41, // 17 1241 | 38, 216, 128, // 18 1242 | 28, 206, 114, // 19 1243 | 5, 119, 55, // 20 1244 | 29, 247, 125, // 21 1245 | 67, 141, 51, // 22 1246 | 15, 3, 9, // 23 1247 | 0, 0, 0, // 24 1248 | 24, 198, 115, // 25 1249 | 14, 197, 63, // 26 1250 | 49, 237, 41, // 27 1251 | 42, 197, 108, // 28 1252 | 61, 145, 80, // 29 1253 | 73, 130, 68, // 30 1254 | 70, 99, 54, // 31 1255 | 14, 24, 41, // 32 1256 | 3, 1, 6, // 33 1257 | 0, 0, 0, // 34 1258 | 0, 2, 3, // 35 1259 | 7, 5, 13, // 36 1260 | 24, 36, 45, // 37 1261 | 0, 3, 6, // 38 1262 | 0, 1, 2, // 39 1263 | 0, 0, 1, // 40 1264 | 8, 10, 13, // 41 1265 | 0, 0, 1, // 42 1266 | 1, 2, 5, // 43 1267 | 1, 4, 5, // 44 1268 | 37, 124, 154, // 45 1269 | 0, 2, 3, // 46 1270 | 1, 4, 6, // 47 1271 | 1, 1, 2, // 48 1272 | 0, 0, 1, // 49 1273 | 0, 0, 1, // 50 1274 | 1, 2, 3, // 51 1275 | 0, 0, 1, // 52 1276 | 3, 3, 3, // 53 1277 | 0, 0, 0, // 54 1278 | 1, 1, 1, // 55 1279 | 0, 0, 1, // 56 1280 | 1, 1, 2, // 57 1281 | 0, 0, 0, // 58 1282 | 0, 1, 1, // 59 1283 | // Frame: 21 1284 | 1, 3, 7, // 0 1285 | 1, 3, 7, // 1 1286 | 0, 0, 4, // 2 1287 | 0, 0, 1, // 3 1288 | 0, 1, 2, // 4 1289 | 5, 6, 9, // 5 1290 | 1, 6, 11, // 6 1291 | 25, 86, 121, // 7 1292 | 0, 0, 3, // 8 1293 | 0, 1, 1, // 9 1294 | 5, 7, 10, // 10 1295 | 74, 122, 134, // 11 1296 | 13, 79, 49, // 12 1297 | 0, 27, 5, // 13 1298 | 0, 43, 17, // 14 1299 | 18, 93, 53, // 15 1300 | 12, 99, 56, // 16 1301 | 20, 99, 58, // 17 1302 | 39, 166, 117, // 18 1303 | 9, 87, 55, // 19 1304 | 4, 84, 46, // 20 1305 | 0, 18, 3, // 21 1306 | 2, 0, 1, // 22 1307 | 11, 4, 8, // 23 1308 | 3, 1, 2, // 24 1309 | 43, 240, 146, // 25 1310 | 22, 226, 121, // 26 1311 | 33, 251, 127, // 27 1312 | 40, 237, 89, // 28 1313 | 41, 213, 110, // 29 1314 | 70, 148, 112, // 30 1315 | 61, 34, 39, // 31 1316 | 28, 15, 11, // 32 1317 | 0, 1, 3, // 33 1318 | 5, 9, 14, // 34 1319 | 3, 5, 6, // 35 1320 | 0, 1, 0, // 36 1321 | 8, 11, 9, // 37 1322 | 4, 24, 31, // 38 1323 | 0, 0, 0, // 39 1324 | 0, 0, 1, // 40 1325 | 3, 3, 8, // 41 1326 | 3, 0, 4, // 42 1327 | 2, 3, 5, // 43 1328 | 0, 0, 2, // 44 1329 | 0, 0, 0, // 45 1330 | 1, 3, 3, // 46 1331 | 3, 6, 5, // 47 1332 | 4, 6, 7, // 48 1333 | 3, 3, 5, // 49 1334 | 0, 1, 2, // 50 1335 | 0, 0, 1, // 51 1336 | 2, 3, 3, // 52 1337 | 0, 0, 0, // 53 1338 | 1, 1, 2, // 54 1339 | 0, 0, 0, // 55 1340 | 1, 0, 1, // 56 1341 | 0, 0, 1, // 57 1342 | 1, 2, 3, // 58 1343 | 2, 4, 3, // 59 1344 | // Frame: 22 1345 | 5, 7, 13, // 0 1346 | 3, 5, 10, // 1 1347 | 2, 3, 7, // 2 1348 | 8, 9, 9, // 3 1349 | 9, 10, 10, // 4 1350 | 2, 4, 5, // 5 1351 | 4, 4, 10, // 6 1352 | 5, 2, 6, // 7 1353 | 0, 0, 1, // 8 1354 | 0, 0, 1, // 9 1355 | 1, 1, 3, // 10 1356 | 0, 11, 7, // 11 1357 | 13, 43, 32, // 12 1358 | 24, 155, 92, // 13 1359 | 10, 108, 54, // 14 1360 | 43, 173, 114, // 15 1361 | 9, 110, 54, // 16 1362 | 6, 61, 31, // 17 1363 | 1, 44, 20, // 18 1364 | 9, 76, 46, // 19 1365 | 12, 200, 97, // 20 1366 | 0, 20, 0, // 21 1367 | 2, 0, 0, // 22 1368 | 11, 3, 9, // 23 1369 | 5, 2, 3, // 24 1370 | 38, 181, 98, // 25 1371 | 27, 232, 137, // 26 1372 | 32, 247, 135, // 27 1373 | 43, 244, 87, // 28 1374 | 94, 255, 226, // 29 1375 | 6, 18, 17, // 30 1376 | 56, 45, 50, // 31 1377 | 33, 9, 8, // 32 1378 | 3, 0, 0, // 33 1379 | 28, 33, 36, // 34 1380 | 9, 10, 10, // 35 1381 | 0, 1, 0, // 36 1382 | 0, 0, 0, // 37 1383 | 0, 0, 0, // 38 1384 | 5, 8, 6, // 39 1385 | 0, 0, 1, // 40 1386 | 3, 9, 12, // 41 1387 | 4, 10, 11, // 42 1388 | 0, 1, 3, // 43 1389 | 0, 2, 3, // 44 1390 | 0, 0, 1, // 45 1391 | 0, 3, 6, // 46 1392 | 15, 36, 42, // 47 1393 | 10, 13, 15, // 48 1394 | 0, 0, 0, // 49 1395 | 0, 1, 2, // 50 1396 | 0, 0, 0, // 51 1397 | 0, 1, 2, // 52 1398 | 0, 0, 1, // 53 1399 | 0, 0, 1, // 54 1400 | 0, 0, 0, // 55 1401 | 0, 0, 1, // 56 1402 | 0, 0, 0, // 57 1403 | 0, 0, 0, // 58 1404 | 0, 0, 0, // 59 1405 | // Frame: 23 1406 | 0, 1, 5, // 0 1407 | 0, 0, 2, // 1 1408 | 2, 3, 8, // 2 1409 | 1, 3, 6, // 3 1410 | 0, 2, 4, // 4 1411 | 0, 0, 1, // 5 1412 | 0, 0, 1, // 6 1413 | 4, 4, 9, // 7 1414 | 0, 0, 2, // 8 1415 | 2, 6, 10, // 9 1416 | 27, 100, 68, // 10 1417 | 6, 46, 28, // 11 1418 | 11, 101, 55, // 12 1419 | 12, 95, 50, // 13 1420 | 15, 144, 73, // 14 1421 | 0, 58, 22, // 15 1422 | 22, 176, 102, // 16 1423 | 0, 43, 17, // 17 1424 | 21, 169, 97, // 18 1425 | 6, 83, 43, // 19 1426 | 5, 143, 62, // 20 1427 | 30, 41, 5, // 21 1428 | 59, 5, 13, // 22 1429 | 39, 8, 20, // 23 1430 | 0, 0, 0, // 24 1431 | 25, 247, 134, // 25 1432 | 26, 237, 121, // 26 1433 | 28, 255, 107, // 27 1434 | 0, 39, 15, // 28 1435 | 3, 50, 50, // 29 1436 | 11, 35, 25, // 30 1437 | 0, 0, 0, // 31 1438 | 2, 1, 1, // 32 1439 | 12, 1, 1, // 33 1440 | 24, 9, 4, // 34 1441 | 4, 0, 0, // 35 1442 | 12, 5, 3, // 36 1443 | 2, 2, 2, // 37 1444 | 0, 0, 1, // 38 1445 | 2, 4, 7, // 39 1446 | 11, 14, 15, // 40 1447 | 0, 4, 7, // 41 1448 | 1, 3, 4, // 42 1449 | 0, 0, 1, // 43 1450 | 3, 5, 8, // 44 1451 | 0, 4, 7, // 45 1452 | 9, 12, 14, // 46 1453 | 0, 0, 2, // 47 1454 | 59, 124, 153, // 48 1455 | 0, 3, 4, // 49 1456 | 2, 6, 7, // 50 1457 | 0, 0, 1, // 51 1458 | 0, 0, 0, // 52 1459 | 0, 0, 0, // 53 1460 | 0, 0, 0, // 54 1461 | 0, 0, 0, // 55 1462 | 0, 0, 0, // 56 1463 | 0, 0, 0, // 57 1464 | 25, 30, 34, // 58 1465 | 0, 0, 0, // 59 1466 | // Frame: 24 1467 | 1, 2, 8, // 0 1468 | 0, 0, 3, // 1 1469 | 1, 3, 8, // 2 1470 | 2, 3, 9, // 3 1471 | 1, 1, 2, // 4 1472 | 2, 4, 6, // 5 1473 | 0, 0, 2, // 6 1474 | 0, 0, 3, // 7 1475 | 3, 8, 9, // 8 1476 | 43, 157, 110, // 9 1477 | 10, 141, 71, // 10 1478 | 12, 173, 77, // 11 1479 | 31, 246, 132, // 12 1480 | 28, 228, 122, // 13 1481 | 29, 230, 124, // 14 1482 | 11, 132, 59, // 15 1483 | 24, 138, 86, // 16 1484 | 20, 164, 88, // 17 1485 | 11, 112, 58, // 18 1486 | 26, 134, 84, // 19 1487 | 39, 242, 145, // 20 1488 | 39, 161, 23, // 21 1489 | 74, 158, 87, // 22 1490 | 77, 132, 70, // 23 1491 | 36, 200, 104, // 24 1492 | 27, 228, 88, // 25 1493 | 20, 226, 115, // 26 1494 | 28, 119, 183, // 27 1495 | 2, 47, 34, // 28 1496 | 14, 90, 111, // 29 1497 | 7, 30, 36, // 30 1498 | 21, 69, 70, // 31 1499 | 0, 0, 0, // 32 1500 | 3, 9, 7, // 33 1501 | 17, 9, 9, // 34 1502 | 26, 15, 20, // 35 1503 | 40, 8, 11, // 36 1504 | 11, 2, 2, // 37 1505 | 7, 15, 13, // 38 1506 | 14, 30, 32, // 39 1507 | 0, 3, 4, // 40 1508 | 4, 14, 25, // 41 1509 | 3, 6, 14, // 42 1510 | 1, 3, 5, // 43 1511 | 3, 5, 8, // 44 1512 | 3, 9, 13, // 45 1513 | 2, 5, 7, // 46 1514 | 0, 1, 2, // 47 1515 | 0, 0, 2, // 48 1516 | 2, 9, 10, // 49 1517 | 1, 4, 5, // 50 1518 | 3, 3, 5, // 51 1519 | 0, 0, 0, // 52 1520 | 3, 0, 0, // 53 1521 | 0, 0, 0, // 54 1522 | 0, 0, 1, // 55 1523 | 0, 0, 0, // 56 1524 | 0, 0, 1, // 57 1525 | 0, 0, 0, // 58 1526 | 0, 1, 1, // 59 1527 | // Frame: 25 1528 | 3, 5, 10, // 0 1529 | 4, 6, 9, // 1 1530 | 2, 2, 7, // 2 1531 | 0, 0, 0, // 3 1532 | 0, 0, 0, // 4 1533 | 2, 1, 5, // 5 1534 | 7, 13, 18, // 6 1535 | 0, 1, 4, // 7 1536 | 10, 83, 50, // 8 1537 | 18, 150, 76, // 9 1538 | 23, 232, 121, // 10 1539 | 28, 246, 129, // 11 1540 | 27, 228, 119, // 12 1541 | 20, 197, 99, // 13 1542 | 33, 230, 127, // 14 1543 | 15, 167, 83, // 15 1544 | 28, 197, 114, // 16 1545 | 0, 61, 24, // 17 1546 | 22, 160, 87, // 18 1547 | 16, 130, 72, // 19 1548 | 22, 176, 102, // 20 1549 | 71, 232, 41, // 21 1550 | 42, 175, 89, // 22 1551 | 76, 133, 93, // 23 1552 | 55, 141, 75, // 24 1553 | 29, 223, 115, // 25 1554 | 26, 134, 218, // 26 1555 | 4, 48, 98, // 27 1556 | 30, 141, 153, // 28 1557 | 0, 11, 18, // 29 1558 | 1, 3, 4, // 30 1559 | 0, 2, 0, // 31 1560 | 0, 1, 0, // 32 1561 | 1, 21, 19, // 33 1562 | 0, 1, 0, // 34 1563 | 11, 14, 13, // 35 1564 | 31, 20, 17, // 36 1565 | 62, 28, 32, // 37 1566 | 17, 3, 2, // 38 1567 | 2, 2, 2, // 39 1568 | 1, 4, 13, // 40 1569 | 9, 26, 31, // 41 1570 | 15, 23, 31, // 42 1571 | 6, 17, 25, // 43 1572 | 0, 1, 4, // 44 1573 | 0, 0, 2, // 45 1574 | 4, 6, 9, // 46 1575 | 4, 5, 6, // 47 1576 | 3, 5, 6, // 48 1577 | 84, 124, 137, // 49 1578 | 0, 0, 1, // 50 1579 | 0, 0, 0, // 51 1580 | 0, 0, 0, // 52 1581 | 0, 0, 0, // 53 1582 | 1, 1, 2, // 54 1583 | 0, 0, 0, // 55 1584 | 0, 0, 1, // 56 1585 | 0, 0, 1, // 57 1586 | 0, 0, 1, // 58 1587 | 0, 0, 0, // 59 1588 | // Frame: 26 1589 | 1, 2, 7, // 0 1590 | 1, 1, 4, // 1 1591 | 0, 0, 2, // 2 1592 | 0, 0, 0, // 3 1593 | 9, 11, 14, // 4 1594 | 0, 3, 5, // 5 1595 | 0, 0, 4, // 6 1596 | 25, 137, 86, // 7 1597 | 26, 167, 93, // 8 1598 | 21, 205, 104, // 9 1599 | 30, 253, 132, // 10 1600 | 29, 249, 129, // 11 1601 | 32, 247, 134, // 12 1602 | 22, 203, 107, // 13 1603 | 49, 255, 161, // 14 1604 | 21, 151, 87, // 15 1605 | 16, 170, 86, // 16 1606 | 29, 233, 124, // 17 1607 | 9, 138, 61, // 18 1608 | 14, 154, 77, // 19 1609 | 7, 134, 73, // 20 1610 | 70, 239, 47, // 21 1611 | 36, 253, 114, // 22 1612 | 25, 85, 70, // 23 1613 | 79, 121, 89, // 24 1614 | 31, 88, 135, // 25 1615 | 9, 59, 107, // 26 1616 | 3, 66, 111, // 27 1617 | 14, 87, 71, // 28 1618 | 0, 15, 20, // 29 1619 | 38, 98, 84, // 30 1620 | 0, 0, 0, // 31 1621 | 0, 6, 4, // 32 1622 | 9, 21, 22, // 33 1623 | 0, 11, 11, // 34 1624 | 3, 14, 16, // 35 1625 | 13, 18, 24, // 36 1626 | 30, 42, 58, // 37 1627 | 28, 4, 4, // 38 1628 | 26, 3, 4, // 39 1629 | 39, 55, 74, // 40 1630 | 4, 16, 23, // 41 1631 | 11, 28, 39, // 42 1632 | 0, 3, 8, // 43 1633 | 0, 4, 6, // 44 1634 | 0, 3, 5, // 45 1635 | 0, 2, 4, // 46 1636 | 2, 4, 5, // 47 1637 | 2, 3, 6, // 48 1638 | 3, 5, 8, // 49 1639 | 0, 1, 2, // 50 1640 | 0, 0, 0, // 51 1641 | 0, 0, 1, // 52 1642 | 0, 0, 0, // 53 1643 | 130, 136, 140, // 54 1644 | 0, 0, 0, // 55 1645 | 0, 0, 1, // 56 1646 | 0, 0, 0, // 57 1647 | 0, 0, 0, // 58 1648 | 2, 3, 4, // 59 1649 | // Frame: 27 1650 | 0, 1, 3, // 0 1651 | 0, 0, 0, // 1 1652 | 0, 0, 0, // 2 1653 | 1, 0, 1, // 3 1654 | 1, 1, 2, // 4 1655 | 0, 2, 6, // 5 1656 | 3, 46, 26, // 6 1657 | 15, 137, 70, // 7 1658 | 39, 244, 138, // 8 1659 | 28, 251, 129, // 9 1660 | 30, 253, 132, // 10 1661 | 32, 255, 135, // 11 1662 | 31, 255, 137, // 12 1663 | 26, 228, 124, // 13 1664 | 43, 255, 159, // 14 1665 | 24, 151, 83, // 15 1666 | 17, 107, 88, // 16 1667 | 5, 137, 56, // 17 1668 | 21, 176, 94, // 18 1669 | 27, 153, 92, // 19 1670 | 51, 178, 125, // 20 1671 | 53, 176, 45, // 21 1672 | 33, 111, 61, // 22 1673 | 3, 20, 19, // 23 1674 | 28, 29, 47, // 24 1675 | 42, 35, 45, // 25 1676 | 7, 16, 34, // 26 1677 | 2, 21, 34, // 27 1678 | 36, 125, 64, // 28 1679 | 1, 17, 29, // 29 1680 | 0, 1, 2, // 30 1681 | 0, 5, 7, // 31 1682 | 2, 6, 13, // 32 1683 | 6, 23, 26, // 33 1684 | 0, 15, 21, // 34 1685 | 3, 26, 32, // 35 1686 | 3, 24, 32, // 36 1687 | 1, 12, 17, // 37 1688 | 21, 11, 10, // 38 1689 | 47, 17, 20, // 39 1690 | 84, 70, 89, // 40 1691 | 34, 26, 29, // 41 1692 | 9, 18, 22, // 42 1693 | 3, 12, 18, // 43 1694 | 1, 5, 9, // 44 1695 | 1, 6, 9, // 45 1696 | 1, 3, 6, // 46 1697 | 1, 2, 4, // 47 1698 | 0, 0, 1, // 48 1699 | 6, 9, 11, // 49 1700 | 0, 1, 3, // 50 1701 | 0, 0, 1, // 51 1702 | 0, 0, 1, // 52 1703 | 10, 12, 12, // 53 1704 | 3, 3, 4, // 54 1705 | 0, 0, 1, // 55 1706 | 0, 0, 0, // 56 1707 | 0, 0, 1, // 57 1708 | 0, 0, 0, // 58 1709 | 0, 0, 0, // 59 1710 | // Frame: 28 1711 | 4, 15, 13, // 0 1712 | 0, 0, 0, // 1 1713 | 6, 8, 11, // 2 1714 | 3, 5, 6, // 3 1715 | 5, 6, 9, // 4 1716 | 1, 15, 10, // 5 1717 | 30, 189, 100, // 6 1718 | 26, 221, 117, // 7 1719 | 30, 240, 129, // 8 1720 | 30, 242, 129, // 9 1721 | 28, 255, 129, // 10 1722 | 28, 221, 125, // 11 1723 | 30, 253, 135, // 12 1724 | 30, 251, 128, // 13 1725 | 28, 239, 122, // 14 1726 | 35, 206, 124, // 15 1727 | 30, 198, 107, // 16 1728 | 2, 74, 74, // 17 1729 | 0, 6, 11, // 18 1730 | 7, 10, 18, // 19 1731 | 0, 0, 4, // 20 1732 | 7, 24, 4, // 21 1733 | 0, 0, 3, // 22 1734 | 14, 36, 51, // 23 1735 | 5, 14, 19, // 24 1736 | 33, 10, 15, // 25 1737 | 8, 6, 2, // 26 1738 | 0, 12, 10, // 27 1739 | 112, 210, 63, // 28 1740 | 0, 13, 13, // 29 1741 | 50, 93, 110, // 30 1742 | 20, 112, 205, // 31 1743 | 20, 95, 173, // 32 1744 | 9, 80, 148, // 33 1745 | 5, 19, 27, // 34 1746 | 57, 126, 131, // 35 1747 | 16, 85, 131, // 36 1748 | 0, 6, 10, // 37 1749 | 5, 22, 32, // 38 1750 | 14, 26, 33, // 39 1751 | 48, 36, 43, // 40 1752 | 50, 16, 17, // 41 1753 | 19, 4, 6, // 42 1754 | 11, 13, 14, // 43 1755 | 0, 1, 4, // 44 1756 | 1, 5, 9, // 45 1757 | 0, 0, 1, // 46 1758 | 0, 0, 1, // 47 1759 | 0, 0, 0, // 48 1760 | 8, 11, 17, // 49 1761 | 0, 3, 4, // 50 1762 | 43, 57, 61, // 51 1763 | 0, 0, 1, // 52 1764 | 0, 1, 1, // 53 1765 | 0, 0, 0, // 54 1766 | 0, 0, 1, // 55 1767 | 0, 0, 0, // 56 1768 | 0, 0, 0, // 57 1769 | 0, 0, 0, // 58 1770 | 0, 0, 0, // 59 1771 | // Frame: 29 1772 | 3, 9, 11, // 0 1773 | 2, 3, 5, // 1 1774 | 0, 0, 2, // 2 1775 | 0, 1, 2, // 3 1776 | 0, 0, 3, // 4 1777 | 36, 255, 151, // 5 1778 | 26, 251, 137, // 6 1779 | 26, 242, 127, // 7 1780 | 25, 235, 122, // 8 1781 | 39, 246, 143, // 9 1782 | 25, 235, 119, // 10 1783 | 30, 239, 132, // 11 1784 | 35, 233, 143, // 12 1785 | 18, 172, 90, // 13 1786 | 0, 25, 13, // 14 1787 | 3, 15, 17, // 15 1788 | 15, 55, 81, // 16 1789 | 6, 24, 38, // 17 1790 | 9, 45, 67, // 18 1791 | 8, 62, 103, // 19 1792 | 2, 4, 8, // 20 1793 | 39, 86, 26, // 21 1794 | 43, 87, 6, // 22 1795 | 0, 0, 3, // 23 1796 | 0, 1, 4, // 24 1797 | 6, 2, 1, // 25 1798 | 85, 48, 27, // 26 1799 | 96, 147, 32, // 27 1800 | 9, 26, 28, // 28 1801 | 16, 57, 71, // 29 1802 | 0, 7, 10, // 30 1803 | 7, 54, 72, // 31 1804 | 6, 32, 57, // 32 1805 | 4, 30, 42, // 33 1806 | 22, 79, 119, // 34 1807 | 6, 60, 99, // 35 1808 | 9, 91, 151, // 36 1809 | 20, 86, 134, // 37 1810 | 2, 36, 56, // 38 1811 | 6, 28, 43, // 39 1812 | 3, 19, 25, // 40 1813 | 18, 9, 6, // 41 1814 | 51, 11, 9, // 42 1815 | 33, 6, 4, // 43 1816 | 13, 0, 2, // 44 1817 | 2, 2, 3, // 45 1818 | 3, 7, 9, // 46 1819 | 0, 1, 3, // 47 1820 | 2, 4, 4, // 48 1821 | 0, 1, 3, // 49 1822 | 1, 4, 6, // 50 1823 | 0, 0, 2, // 51 1824 | 3, 4, 4, // 52 1825 | 0, 0, 1, // 53 1826 | 8, 8, 10, // 54 1827 | 0, 0, 1, // 55 1828 | 0, 0, 1, // 56 1829 | 0, 1, 1, // 57 1830 | 0, 0, 1, // 58 1831 | 0, 0, 0, // 59 1832 | // Frame: 30 1833 | 0, 1, 3, // 0 1834 | 0, 1, 2, // 1 1835 | 0, 1, 4, // 2 1836 | 0, 0, 2, // 3 1837 | 43, 178, 117, // 4 1838 | 29, 249, 129, // 5 1839 | 31, 239, 122, // 6 1840 | 28, 242, 128, // 7 1841 | 30, 253, 135, // 8 1842 | 25, 255, 151, // 9 1843 | 11, 48, 32, // 10 1844 | 4, 15, 17, // 11 1845 | 0, 15, 22, // 12 1846 | 0, 6, 12, // 13 1847 | 6, 14, 22, // 14 1848 | 2, 24, 34, // 15 1849 | 17, 125, 197, // 16 1850 | 6, 74, 128, // 17 1851 | 10, 96, 148, // 18 1852 | 14, 126, 201, // 19 1853 | 53, 111, 151, // 20 1854 | 0, 11, 14, // 21 1855 | 82, 203, 17, // 22 1856 | 106, 221, 29, // 23 1857 | 107, 228, 20, // 24 1858 | 86, 176, 6, // 25 1859 | 11, 2, 0, // 26 1860 | 42, 13, 8, // 27 1861 | 10, 0, 5, // 28 1862 | 1, 3, 9, // 29 1863 | 3, 39, 73, // 30 1864 | 4, 26, 32, // 31 1865 | 2, 10, 21, // 32 1866 | 1, 10, 18, // 33 1867 | 0, 15, 28, // 34 1868 | 13, 113, 185, // 35 1869 | 17, 122, 201, // 36 1870 | 10, 43, 61, // 37 1871 | 2, 27, 41, // 38 1872 | 3, 26, 38, // 39 1873 | 12, 27, 27, // 40 1874 | 5, 12, 18, // 41 1875 | 22, 14, 13, // 42 1876 | 37, 6, 5, // 43 1877 | 33, 3, 2, // 44 1878 | 10, 0, 1, // 45 1879 | 12, 6, 9, // 46 1880 | 12, 10, 14, // 47 1881 | 5, 9, 11, // 48 1882 | 0, 0, 0, // 49 1883 | 0, 1, 2, // 50 1884 | 0, 0, 2, // 51 1885 | 5, 7, 9, // 52 1886 | 1, 3, 3, // 53 1887 | 2, 3, 3, // 54 1888 | 0, 0, 1, // 55 1889 | 18, 19, 18, // 56 1890 | 0, 0, 1, // 57 1891 | 2, 2, 3, // 58 1892 | 0, 0, 0, // 59 1893 | // Frame: 31 1894 | 1, 2, 2, // 0 1895 | 0, 1, 1, // 1 1896 | 6, 5, 8, // 2 1897 | 16, 26, 26, // 3 1898 | 49, 220, 129, // 4 1899 | 29, 249, 127, // 5 1900 | 52, 246, 151, // 6 1901 | 0, 15, 7, // 7 1902 | 1, 9, 13, // 8 1903 | 5, 6, 13, // 9 1904 | 1, 6, 10, // 10 1905 | 2, 7, 11, // 11 1906 | 0, 3, 10, // 12 1907 | 11, 27, 38, // 13 1908 | 4, 21, 35, // 14 1909 | 4, 37, 58, // 15 1910 | 6, 68, 108, // 16 1911 | 14, 93, 156, // 17 1912 | 17, 124, 222, // 18 1913 | 11, 92, 161, // 19 1914 | 6, 43, 58, // 20 1915 | 5, 25, 46, // 21 1916 | 0, 0, 3, // 22 1917 | 85, 220, 13, // 23 1918 | 113, 175, 54, // 24 1919 | 1, 0, 6, // 25 1920 | 8, 7, 12, // 26 1921 | 26, 3, 9, // 27 1922 | 29, 13, 24, // 28 1923 | 6, 8, 15, // 29 1924 | 2, 8, 15, // 30 1925 | 0, 0, 2, // 31 1926 | 1, 6, 11, // 32 1927 | 0, 4, 11, // 33 1928 | 6, 15, 26, // 34 1929 | 13, 115, 197, // 35 1930 | 7, 63, 106, // 36 1931 | 1, 21, 34, // 37 1932 | 3, 23, 49, // 38 1933 | 14, 46, 60, // 39 1934 | 9, 36, 40, // 40 1935 | 0, 8, 10, // 41 1936 | 8, 22, 25, // 42 1937 | 4, 2, 5, // 43 1938 | 41, 14, 14, // 44 1939 | 85, 44, 51, // 45 1940 | 26, 3, 3, // 46 1941 | 6, 0, 1, // 47 1942 | 0, 0, 0, // 48 1943 | 3, 6, 6, // 49 1944 | 1, 6, 6, // 50 1945 | 1, 3, 4, // 51 1946 | 0, 0, 0, // 52 1947 | 14, 20, 17, // 53 1948 | 0, 0, 2, // 54 1949 | 1, 1, 2, // 55 1950 | 0, 0, 0, // 56 1951 | 0, 0, 1, // 57 1952 | 0, 0, 0, // 58 1953 | 2, 2, 3, // 59 1954 | // Frame: 32 1955 | 72, 107, 131, // 0 1956 | 0, 0, 0, // 1 1957 | 0, 1, 1, // 2 1958 | 0, 2, 2, // 3 1959 | 0, 5, 5, // 4 1960 | 15, 19, 23, // 5 1961 | 0, 0, 2, // 6 1962 | 1, 3, 8, // 7 1963 | 9, 16, 23, // 8 1964 | 2, 6, 9, // 9 1965 | 0, 1, 3, // 10 1966 | 0, 3, 7, // 11 1967 | 2, 6, 13, // 12 1968 | 14, 21, 34, // 13 1969 | 3, 24, 34, // 14 1970 | 5, 32, 56, // 15 1971 | 2, 20, 34, // 16 1972 | 4, 45, 70, // 17 1973 | 18, 107, 181, // 18 1974 | 8, 79, 128, // 19 1975 | 2, 50, 93, // 20 1976 | 9, 43, 68, // 21 1977 | 2, 22, 26, // 22 1978 | 9, 23, 21, // 23 1979 | 12, 24, 40, // 24 1980 | 3, 5, 8, // 25 1981 | 0, 0, 2, // 26 1982 | 2, 0, 2, // 27 1983 | 48, 9, 7, // 28 1984 | 33, 23, 31, // 29 1985 | 10, 18, 21, // 30 1986 | 0, 0, 1, // 31 1987 | 0, 4, 8, // 32 1988 | 0, 3, 10, // 33 1989 | 5, 17, 27, // 34 1990 | 6, 59, 84, // 35 1991 | 13, 64, 119, // 36 1992 | 21, 71, 118, // 37 1993 | 0, 45, 86, // 38 1994 | 4, 22, 33, // 39 1995 | 2, 12, 20, // 40 1996 | 0, 29, 45, // 41 1997 | 0, 9, 12, // 42 1998 | 0, 2, 5, // 43 1999 | 21, 26, 34, // 44 2000 | 34, 20, 19, // 45 2001 | 39, 6, 9, // 46 2002 | 37, 5, 5, // 47 2003 | 16, 2, 2, // 48 2004 | 10, 9, 8, // 49 2005 | 0, 1, 3, // 50 2006 | 4, 8, 12, // 51 2007 | 0, 0, 2, // 52 2008 | 15, 62, 97, // 53 2009 | 0, 0, 2, // 54 2010 | 7, 7, 7, // 55 2011 | 0, 0, 1, // 56 2012 | 0, 0, 1, // 57 2013 | 0, 0, 1, // 58 2014 | 4, 5, 6, // 59 2015 | // Frame: 33 2016 | 1, 3, 7, // 0 2017 | 2, 6, 11, // 1 2018 | 1, 3, 6, // 2 2019 | 1, 1, 1, // 3 2020 | 1, 1, 2, // 4 2021 | 0, 1, 4, // 5 2022 | 1, 3, 7, // 6 2023 | 6, 26, 34, // 7 2024 | 0, 5, 10, // 8 2025 | 0, 0, 1, // 9 2026 | 1, 1, 4, // 10 2027 | 0, 1, 4, // 11 2028 | 0, 5, 9, // 12 2029 | 2, 16, 24, // 13 2030 | 0, 10, 19, // 14 2031 | 3, 21, 34, // 15 2032 | 1, 14, 22, // 16 2033 | 17, 57, 82, // 17 2034 | 5, 50, 77, // 18 2035 | 21, 105, 161, // 19 2036 | 2, 31, 53, // 20 2037 | 0, 24, 41, // 21 2038 | 6, 46, 73, // 22 2039 | 5, 30, 51, // 23 2040 | 1, 7, 17, // 24 2041 | 2, 5, 10, // 25 2042 | 11, 18, 25, // 26 2043 | 0, 4, 14, // 27 2044 | 11, 0, 1, // 28 2045 | 30, 5, 7, // 29 2046 | 34, 36, 41, // 30 2047 | 4, 15, 20, // 31 2048 | 1, 8, 16, // 32 2049 | 5, 21, 36, // 33 2050 | 1, 12, 19, // 34 2051 | 3, 19, 31, // 35 2052 | 4, 36, 55, // 36 2053 | 6, 40, 63, // 37 2054 | 8, 61, 98, // 38 2055 | 11, 45, 63, // 39 2056 | 0, 5, 9, // 40 2057 | 1, 12, 15, // 41 2058 | 0, 4, 6, // 42 2059 | 0, 8, 11, // 43 2060 | 0, 5, 7, // 44 2061 | 7, 13, 18, // 45 2062 | 18, 11, 13, // 46 2063 | 39, 6, 6, // 47 2064 | 39, 2, 2, // 48 2065 | 36, 7, 5, // 49 2066 | 7, 1, 2, // 50 2067 | 3, 7, 8, // 51 2068 | 0, 3, 5, // 52 2069 | 0, 1, 2, // 53 2070 | 1, 3, 3, // 54 2071 | 0, 0, 0, // 55 2072 | 0, 1, 2, // 56 2073 | 0, 0, 0, // 57 2074 | 13, 22, 24, // 58 2075 | 1, 0, 0, // 59 2076 | // Frame: 34 2077 | 1, 3, 7, // 0 2078 | 3, 6, 11, // 1 2079 | 6, 10, 17, // 2 2080 | 0, 0, 1, // 3 2081 | 0, 0, 0, // 4 2082 | 5, 6, 6, // 5 2083 | 2, 4, 6, // 6 2084 | 0, 1, 3, // 7 2085 | 0, 0, 0, // 8 2086 | 0, 0, 0, // 9 2087 | 0, 1, 3, // 10 2088 | 1, 3, 6, // 11 2089 | 14, 24, 34, // 12 2090 | 0, 0, 3, // 13 2091 | 0, 9, 15, // 14 2092 | 1, 13, 20, // 15 2093 | 14, 35, 46, // 16 2094 | 3, 33, 54, // 17 2095 | 7, 41, 68, // 18 2096 | 1, 23, 37, // 19 2097 | 4, 30, 49, // 20 2098 | 7, 59, 86, // 21 2099 | 1, 17, 24, // 22 2100 | 0, 15, 26, // 23 2101 | 6, 29, 42, // 24 2102 | 0, 6, 11, // 25 2103 | 5, 7, 14, // 26 2104 | 1, 3, 8, // 27 2105 | 4, 1, 3, // 28 2106 | 25, 1, 3, // 29 2107 | 17, 1, 4, // 30 2108 | 4, 17, 20, // 31 2109 | 2, 16, 24, // 32 2110 | 5, 21, 29, // 33 2111 | 2, 18, 29, // 34 2112 | 5, 17, 24, // 35 2113 | 0, 0, 3, // 36 2114 | 7, 20, 33, // 37 2115 | 1, 13, 22, // 38 2116 | 0, 13, 25, // 39 2117 | 0, 5, 9, // 40 2118 | 11, 26, 35, // 41 2119 | 9, 22, 29, // 42 2120 | 2, 8, 11, // 43 2121 | 0, 0, 1, // 44 2122 | 0, 0, 1, // 45 2123 | 1, 3, 4, // 46 2124 | 10, 5, 6, // 47 2125 | 39, 14, 12, // 48 2126 | 33, 0, 1, // 49 2127 | 36, 3, 3, // 50 2128 | 6, 0, 1, // 51 2129 | 3, 2, 3, // 52 2130 | 2, 4, 5, // 53 2131 | 3, 4, 4, // 54 2132 | 0, 0, 0, // 55 2133 | 2, 2, 3, // 56 2134 | 0, 0, 1, // 57 2135 | 2, 3, 3, // 58 2136 | 58, 112, 140, // 59 2137 | // Frame: 35 2138 | 0, 1, 5, // 0 2139 | 0, 1, 4, // 1 2140 | 3, 6, 12, // 2 2141 | 2, 4, 5, // 3 2142 | 4, 6, 7, // 4 2143 | 1, 2, 3, // 5 2144 | 0, 0, 2, // 6 2145 | 0, 0, 0, // 7 2146 | 2, 3, 4, // 8 2147 | 0, 2, 3, // 9 2148 | 4, 5, 8, // 10 2149 | 0, 1, 4, // 11 2150 | 0, 2, 5, // 12 2151 | 2, 9, 13, // 13 2152 | 0, 1, 4, // 14 2153 | 2, 12, 18, // 15 2154 | 2, 11, 17, // 16 2155 | 13, 43, 63, // 17 2156 | 7, 33, 53, // 18 2157 | 11, 43, 64, // 19 2158 | 1, 18, 30, // 20 2159 | 4, 21, 34, // 21 2160 | 16, 55, 72, // 22 2161 | 12, 36, 51, // 23 2162 | 15, 38, 53, // 24 2163 | 5, 12, 18, // 25 2164 | 1, 2, 6, // 26 2165 | 1, 2, 6, // 27 2166 | 3, 6, 11, // 28 2167 | 13, 3, 5, // 29 2168 | 48, 7, 8, // 30 2169 | 15, 4, 8, // 31 2170 | 3, 14, 24, // 32 2171 | 3, 22, 36, // 33 2172 | 1, 16, 26, // 34 2173 | 0, 3, 9, // 35 2174 | 3, 18, 35, // 36 2175 | 0, 3, 10, // 37 2176 | 9, 22, 32, // 38 2177 | 12, 36, 50, // 39 2178 | 3, 30, 47, // 40 2179 | 5, 29, 44, // 41 2180 | 0, 7, 12, // 42 2181 | 1, 8, 13, // 43 2182 | 2, 6, 7, // 44 2183 | 0, 0, 1, // 45 2184 | 0, 3, 3, // 46 2185 | 1, 3, 4, // 47 2186 | 0, 0, 1, // 48 2187 | 15, 2, 3, // 49 2188 | 27, 1, 1, // 50 2189 | 46, 7, 6, // 51 2190 | 21, 1, 1, // 52 2191 | 6, 1, 1, // 53 2192 | 0, 0, 0, // 54 2193 | 2, 4, 6, // 55 2194 | 1, 2, 3, // 56 2195 | 0, 0, 0, // 57 2196 | 0, 0, 0, // 58 2197 | 0, 1, 0, // 59 2198 | // Frame: 36 2199 | 5, 11, 18, // 0 2200 | 1, 6, 11, // 1 2201 | 5, 6, 9, // 2 2202 | 0, 0, 0, // 3 2203 | 7, 10, 10, // 4 2204 | 0, 0, 0, // 5 2205 | 21, 23, 26, // 6 2206 | 1, 3, 4, // 7 2207 | 3, 5, 7, // 8 2208 | 2, 3, 6, // 9 2209 | 0, 0, 1, // 10 2210 | 1, 1, 3, // 11 2211 | 0, 2, 4, // 12 2212 | 6, 10, 14, // 13 2213 | 0, 4, 9, // 14 2214 | 0, 6, 10, // 15 2215 | 0, 7, 10, // 16 2216 | 16, 39, 49, // 17 2217 | 3, 30, 49, // 18 2218 | 14, 36, 55, // 19 2219 | 0, 5, 13, // 20 2220 | 2, 21, 34, // 21 2221 | 0, 9, 20, // 22 2222 | 5, 18, 27, // 23 2223 | 4, 12, 17, // 24 2224 | 2, 4, 10, // 25 2225 | 0, 0, 2, // 26 2226 | 0, 1, 3, // 27 2227 | 5, 6, 11, // 28 2228 | 3, 6, 9, // 29 2229 | 23, 7, 7, // 30 2230 | 25, 1, 4, // 31 2231 | 3, 5, 12, // 32 2232 | 9, 43, 66, // 33 2233 | 14, 50, 75, // 34 2234 | 1, 7, 13, // 35 2235 | 3, 4, 7, // 36 2236 | 0, 2, 9, // 37 2237 | 0, 10, 17, // 38 2238 | 5, 26, 41, // 39 2239 | 10, 53, 77, // 40 2240 | 1, 26, 34, // 41 2241 | 10, 50, 73, // 42 2242 | 0, 7, 11, // 43 2243 | 0, 1, 2, // 44 2244 | 1, 1, 2, // 45 2245 | 0, 1, 2, // 46 2246 | 0, 0, 0, // 47 2247 | 0, 0, 1, // 48 2248 | 5, 4, 4, // 49 2249 | 6, 1, 1, // 50 2250 | 36, 5, 4, // 51 2251 | 33, 0, 0, // 52 2252 | 35, 1, 2, // 53 2253 | 7, 0, 0, // 54 2254 | 6, 6, 7, // 55 2255 | 0, 0, 1, // 56 2256 | 0, 0, 0, // 57 2257 | 0, 0, 0, // 58 2258 | 0, 0, 1, // 59 2259 | // Frame: 37 2260 | 10, 24, 37, // 0 2261 | 4, 14, 21, // 1 2262 | 0, 1, 1, // 2 2263 | 0, 0, 0, // 3 2264 | 0, 0, 0, // 4 2265 | 8, 9, 12, // 5 2266 | 2, 4, 6, // 6 2267 | 2, 4, 7, // 7 2268 | 5, 7, 10, // 8 2269 | 0, 0, 2, // 9 2270 | 0, 3, 6, // 10 2271 | 2, 3, 7, // 11 2272 | 2, 3, 5, // 12 2273 | 0, 0, 3, // 13 2274 | 0, 5, 9, // 14 2275 | 1, 5, 8, // 15 2276 | 4, 21, 28, // 16 2277 | 1, 19, 29, // 17 2278 | 2, 28, 39, // 18 2279 | 0, 10, 17, // 19 2280 | 16, 35, 51, // 20 2281 | 3, 20, 27, // 21 2282 | 5, 26, 46, // 22 2283 | 22, 76, 94, // 23 2284 | 0, 1, 4, // 24 2285 | 0, 2, 6, // 25 2286 | 0, 2, 4, // 26 2287 | 9, 32, 43, // 27 2288 | 0, 1, 6, // 28 2289 | 1, 2, 6, // 29 2290 | 19, 41, 50, // 30 2291 | 57, 28, 27, // 31 2292 | 28, 15, 23, // 32 2293 | 6, 28, 42, // 33 2294 | 0, 9, 17, // 34 2295 | 21, 48, 69, // 35 2296 | 4, 8, 16, // 36 2297 | 6, 20, 29, // 37 2298 | 0, 8, 15, // 38 2299 | 2, 24, 37, // 39 2300 | 22, 64, 94, // 40 2301 | 9, 43, 60, // 41 2302 | 3, 26, 33, // 42 2303 | 4, 19, 29, // 43 2304 | 0, 1, 0, // 44 2305 | 0, 0, 0, // 45 2306 | 1, 3, 4, // 46 2307 | 4, 5, 5, // 47 2308 | 2, 2, 2, // 48 2309 | 0, 0, 0, // 49 2310 | 0, 0, 1, // 50 2311 | 3, 1, 2, // 51 2312 | 20, 4, 3, // 52 2313 | 38, 3, 1, // 53 2314 | 50, 6, 4, // 54 2315 | 6, 0, 0, // 55 2316 | 7, 4, 3, // 56 2317 | 2, 1, 2, // 57 2318 | 2, 5, 3, // 58 2319 | 17, 46, 53, // 59 2320 | // Frame: 38 2321 | 2, 11, 20, // 0 2322 | 4, 9, 15, // 1 2323 | 0, 0, 3, // 2 2324 | 0, 0, 0, // 3 2325 | 0, 0, 0, // 4 2326 | 7, 10, 10, // 5 2327 | 3, 7, 9, // 6 2328 | 2, 5, 7, // 7 2329 | 0, 0, 1, // 8 2330 | 0, 0, 1, // 9 2331 | 7, 9, 12, // 10 2332 | 3, 3, 6, // 11 2333 | 0, 0, 2, // 12 2334 | 0, 0, 0, // 13 2335 | 0, 2, 6, // 14 2336 | 0, 3, 5, // 15 2337 | 5, 14, 22, // 16 2338 | 0, 15, 27, // 17 2339 | 1, 13, 26, // 18 2340 | 0, 4, 9, // 19 2341 | 7, 22, 32, // 20 2342 | 0, 14, 23, // 21 2343 | 5, 28, 45, // 22 2344 | 0, 8, 14, // 23 2345 | 0, 3, 6, // 24 2346 | 0, 2, 6, // 25 2347 | 8, 14, 19, // 26 2348 | 11, 20, 27, // 27 2349 | 0, 0, 2, // 28 2350 | 1, 7, 14, // 29 2351 | 0, 14, 20, // 30 2352 | 30, 30, 42, // 31 2353 | 43, 17, 21, // 32 2354 | 24, 28, 38, // 33 2355 | 0, 0, 3, // 34 2356 | 3, 15, 25, // 35 2357 | 0, 7, 13, // 36 2358 | 6, 22, 32, // 37 2359 | 0, 10, 18, // 38 2360 | 2, 20, 32, // 39 2361 | 2, 18, 29, // 40 2362 | 10, 24, 32, // 41 2363 | 4, 12, 15, // 42 2364 | 2, 8, 12, // 43 2365 | 0, 1, 1, // 44 2366 | 0, 1, 2, // 45 2367 | 5, 10, 10, // 46 2368 | 1, 2, 3, // 47 2369 | 2, 3, 4, // 48 2370 | 0, 0, 0, // 49 2371 | 1, 2, 3, // 50 2372 | 0, 0, 0, // 51 2373 | 6, 5, 5, // 52 2374 | 10, 2, 1, // 53 2375 | 53, 16, 15, // 54 2376 | 34, 0, 0, // 55 2377 | 31, 3, 4, // 56 2378 | 7, 1, 1, // 57 2379 | 6, 8, 6, // 58 2380 | 0, 0, 0, // 59 2381 | // Frame: 39 2382 | 0, 8, 14, // 0 2383 | 2, 7, 11, // 1 2384 | 0, 1, 6, // 2 2385 | 0, 0, 0, // 3 2386 | 0, 0, 0, // 4 2387 | 5, 9, 14, // 5 2388 | 4, 6, 9, // 6 2389 | 0, 0, 2, // 7 2390 | 0, 0, 2, // 8 2391 | 0, 0, 2, // 9 2392 | 2, 5, 7, // 10 2393 | 0, 0, 2, // 11 2394 | 1, 2, 5, // 12 2395 | 0, 0, 2, // 13 2396 | 3, 7, 10, // 14 2397 | 0, 1, 3, // 15 2398 | 21, 36, 44, // 16 2399 | 3, 27, 47, // 17 2400 | 7, 32, 52, // 18 2401 | 0, 9, 20, // 19 2402 | 8, 32, 46, // 20 2403 | 3, 24, 45, // 21 2404 | 2, 26, 43, // 22 2405 | 1, 13, 23, // 23 2406 | 2, 3, 6, // 24 2407 | 0, 0, 3, // 25 2408 | 14, 22, 27, // 26 2409 | 2, 7, 11, // 27 2410 | 0, 1, 5, // 28 2411 | 0, 7, 14, // 29 2412 | 1, 20, 34, // 30 2413 | 9, 40, 60, // 31 2414 | 52, 73, 107, // 32 2415 | 96, 65, 81, // 33 2416 | 7, 15, 21, // 34 2417 | 0, 3, 7, // 35 2418 | 1, 8, 16, // 36 2419 | 1, 12, 19, // 37 2420 | 0, 9, 16, // 38 2421 | 0, 15, 29, // 39 2422 | 1, 20, 34, // 40 2423 | 6, 38, 51, // 41 2424 | 12, 33, 49, // 42 2425 | 5, 19, 28, // 43 2426 | 0, 0, 2, // 44 2427 | 0, 1, 4, // 45 2428 | 0, 3, 4, // 46 2429 | 1, 2, 3, // 47 2430 | 2, 4, 4, // 48 2431 | 0, 0, 0, // 49 2432 | 0, 1, 3, // 50 2433 | 0, 0, 0, // 51 2434 | 1, 3, 3, // 52 2435 | 1, 1, 2, // 53 2436 | 4, 1, 1, // 54 2437 | 12, 0, 0, // 55 2438 | 42, 5, 5, // 56 2439 | 39, 5, 3, // 57 2440 | 20, 4, 2, // 58 2441 | 1, 0, 0, // 59 2442 | // Frame: 40 2443 | 2, 10, 15, // 0 2444 | 0, 1, 6, // 1 2445 | 2, 8, 15, // 2 2446 | 1, 4, 3, // 3 2447 | 0, 1, 1, // 4 2448 | 0, 0, 1, // 5 2449 | 0, 1, 5, // 6 2450 | 0, 2, 6, // 7 2451 | 15, 18, 25, // 8 2452 | 5, 6, 11, // 9 2453 | 9, 13, 15, // 10 2454 | 0, 1, 3, // 11 2455 | 1, 3, 6, // 12 2456 | 9, 16, 21, // 13 2457 | 0, 1, 4, // 14 2458 | 1, 3, 6, // 15 2459 | 0, 2, 6, // 16 2460 | 17, 33, 54, // 17 2461 | 33, 117, 169, // 18 2462 | 12, 48, 69, // 19 2463 | 1, 13, 24, // 20 2464 | 2, 21, 32, // 21 2465 | 2, 22, 35, // 22 2466 | 10, 28, 41, // 23 2467 | 7, 11, 18, // 24 2468 | 5, 7, 12, // 25 2469 | 0, 1, 3, // 26 2470 | 0, 3, 5, // 27 2471 | 4, 10, 15, // 28 2472 | 1, 15, 30, // 29 2473 | 17, 43, 67, // 30 2474 | 1, 27, 44, // 31 2475 | 10, 30, 43, // 32 2476 | 41, 24, 32, // 33 2477 | 36, 15, 16, // 34 2478 | 0, 1, 6, // 35 2479 | 6, 22, 33, // 36 2480 | 0, 13, 27, // 37 2481 | 6, 33, 48, // 38 2482 | 7, 33, 43, // 39 2483 | 5, 30, 40, // 40 2484 | 0, 9, 20, // 41 2485 | 3, 26, 41, // 42 2486 | 0, 8, 14, // 43 2487 | 0, 4, 8, // 44 2488 | 3, 13, 13, // 45 2489 | 0, 0, 1, // 46 2490 | 0, 2, 3, // 47 2491 | 0, 1, 2, // 48 2492 | 1, 1, 2, // 49 2493 | 0, 1, 1, // 50 2494 | 2, 2, 2, // 51 2495 | 0, 1, 1, // 52 2496 | 0, 0, 0, // 53 2497 | 0, 0, 0, // 54 2498 | 3, 3, 3, // 55 2499 | 16, 3, 3, // 56 2500 | 33, 1, 1, // 57 2501 | 50, 4, 3, // 58 2502 | 31, 6, 3, // 59 2503 | // Frame: 41 2504 | 2, 7, 11, // 0 2505 | 1, 5, 9, // 1 2506 | 0, 1, 5, // 2 2507 | 0, 1, 3, // 3 2508 | 0, 1, 1, // 4 2509 | 1, 3, 5, // 5 2510 | 3, 7, 11, // 6 2511 | 1, 3, 7, // 7 2512 | 0, 1, 4, // 8 2513 | 0, 0, 2, // 9 2514 | 1, 2, 4, // 10 2515 | 1, 2, 3, // 11 2516 | 3, 8, 9, // 12 2517 | 0, 0, 2, // 13 2518 | 9, 11, 15, // 14 2519 | 6, 9, 12, // 15 2520 | 2, 6, 13, // 16 2521 | 2, 17, 26, // 17 2522 | 0, 8, 13, // 18 2523 | 7, 35, 50, // 19 2524 | 3, 16, 22, // 20 2525 | 0, 10, 21, // 21 2526 | 2, 19, 29, // 22 2527 | 2, 14, 26, // 23 2528 | 3, 11, 20, // 24 2529 | 0, 5, 10, // 25 2530 | 0, 2, 5, // 26 2531 | 0, 2, 5, // 27 2532 | 3, 12, 19, // 28 2533 | 5, 26, 41, // 29 2534 | 8, 38, 54, // 30 2535 | 2, 24, 41, // 31 2536 | 2, 22, 37, // 32 2537 | 20, 23, 29, // 33 2538 | 36, 3, 3, // 34 2539 | 15, 6, 9, // 35 2540 | 7, 22, 32, // 36 2541 | 3, 26, 40, // 37 2542 | 1, 29, 46, // 38 2543 | 2, 26, 41, // 39 2544 | 6, 29, 48, // 40 2545 | 4, 18, 29, // 41 2546 | 2, 18, 25, // 42 2547 | 0, 4, 7, // 43 2548 | 0, 3, 4, // 44 2549 | 1, 5, 5, // 45 2550 | 1, 7, 7, // 46 2551 | 0, 4, 3, // 47 2552 | 0, 4, 4, // 48 2553 | 16, 22, 20, // 49 2554 | 0, 1, 1, // 50 2555 | 1, 1, 2, // 51 2556 | 4, 3, 4, // 52 2557 | 0, 1, 1, // 53 2558 | 0, 1, 1, // 54 2559 | 0, 0, 1, // 55 2560 | 0, 0, 0, // 56 2561 | 5, 4, 6, // 57 2562 | 23, 1, 1, // 58 2563 | 48, 3, 1, // 59 2564 | // Frame: 42 2565 | 3, 7, 12, // 0 2566 | 4, 7, 13, // 1 2567 | 0, 1, 4, // 2 2568 | 0, 0, 1, // 3 2569 | 0, 0, 0, // 4 2570 | 9, 13, 12, // 5 2571 | 2, 6, 9, // 6 2572 | 2, 5, 8, // 7 2573 | 2, 3, 9, // 8 2574 | 0, 0, 3, // 9 2575 | 2, 6, 8, // 10 2576 | 0, 1, 3, // 11 2577 | 5, 10, 10, // 12 2578 | 0, 0, 0, // 13 2579 | 2, 6, 8, // 14 2580 | 0, 3, 6, // 15 2581 | 7, 14, 18, // 16 2582 | 0, 2, 6, // 17 2583 | 3, 9, 15, // 18 2584 | 4, 25, 40, // 19 2585 | 44, 132, 176, // 20 2586 | 7, 33, 57, // 21 2587 | 4, 22, 34, // 22 2588 | 1, 11, 22, // 23 2589 | 0, 6, 12, // 24 2590 | 1, 6, 13, // 25 2591 | 2, 5, 13, // 26 2592 | 9, 11, 15, // 27 2593 | 1, 15, 23, // 28 2594 | 5, 21, 33, // 29 2595 | 0, 24, 40, // 30 2596 | 6, 33, 54, // 31 2597 | 2, 9, 15, // 32 2598 | 28, 33, 40, // 33 2599 | 15, 3, 5, // 34 2600 | 46, 8, 7, // 35 2601 | 16, 28, 37, // 36 2602 | 4, 18, 37, // 37 2603 | 4, 33, 49, // 38 2604 | 0, 14, 27, // 39 2605 | 0, 20, 35, // 40 2606 | 13, 57, 66, // 41 2607 | 3, 17, 29, // 42 2608 | 0, 3, 4, // 43 2609 | 0, 1, 2, // 44 2610 | 1, 8, 10, // 45 2611 | 7, 20, 23, // 46 2612 | 1, 5, 8, // 47 2613 | 0, 2, 3, // 48 2614 | 1, 5, 6, // 49 2615 | 0, 1, 2, // 50 2616 | 6, 11, 13, // 51 2617 | 5, 12, 17, // 52 2618 | 5, 8, 9, // 53 2619 | 2, 4, 4, // 54 2620 | 0, 0, 1, // 55 2621 | 0, 1, 2, // 56 2622 | 0, 3, 4, // 57 2623 | 1, 0, 1, // 58 2624 | 16, 1, 0, // 59 2625 | // Frame: 43 2626 | 1, 2, 5, // 0 2627 | 49, 56, 68, // 1 2628 | 0, 2, 5, // 2 2629 | 0, 2, 6, // 3 2630 | 0, 0, 2, // 4 2631 | 0, 0, 1, // 5 2632 | 1, 2, 6, // 6 2633 | 0, 0, 2, // 7 2634 | 0, 0, 3, // 8 2635 | 0, 0, 1, // 9 2636 | 1, 2, 4, // 10 2637 | 2, 2, 3, // 11 2638 | 1, 2, 3, // 12 2639 | 0, 0, 0, // 13 2640 | 0, 1, 4, // 14 2641 | 3, 4, 9, // 15 2642 | 8, 15, 20, // 16 2643 | 9, 18, 25, // 17 2644 | 0, 7, 13, // 18 2645 | 0, 1, 6, // 19 2646 | 18, 36, 58, // 20 2647 | 7, 25, 33, // 21 2648 | 5, 26, 41, // 22 2649 | 1, 16, 27, // 23 2650 | 0, 6, 13, // 24 2651 | 0, 4, 9, // 25 2652 | 7, 18, 24, // 26 2653 | 16, 28, 37, // 27 2654 | 0, 5, 10, // 28 2655 | 0, 1, 6, // 29 2656 | 0, 6, 12, // 30 2657 | 13, 41, 58, // 31 2658 | 1, 8, 14, // 32 2659 | 1, 4, 9, // 33 2660 | 3, 5, 11, // 34 2661 | 42, 11, 14, // 35 2662 | 36, 10, 16, // 36 2663 | 32, 59, 89, // 37 2664 | 0, 15, 24, // 38 2665 | 0, 7, 14, // 39 2666 | 0, 7, 14, // 40 2667 | 9, 59, 75, // 41 2668 | 10, 32, 43, // 42 2669 | 6, 16, 20, // 43 2670 | 0, 1, 4, // 44 2671 | 1, 10, 14, // 45 2672 | 2, 9, 11, // 46 2673 | 4, 11, 11, // 47 2674 | 5, 12, 12, // 48 2675 | 0, 0, 0, // 49 2676 | 0, 0, 0, // 50 2677 | 0, 1, 1, // 51 2678 | 3, 4, 4, // 52 2679 | 0, 2, 2, // 53 2680 | 7, 7, 6, // 54 2681 | 0, 0, 0, // 55 2682 | 0, 0, 1, // 56 2683 | 0, 1, 1, // 57 2684 | 7, 8, 7, // 58 2685 | 0, 1, 1, // 59 2686 | // Frame: 44 2687 | 0, 1, 3, // 0 2688 | 0, 0, 2, // 1 2689 | 4, 8, 12, // 2 2690 | 5, 6, 11, // 3 2691 | 2, 3, 5, // 4 2692 | 0, 0, 0, // 5 2693 | 0, 0, 0, // 6 2694 | 0, 1, 3, // 7 2695 | 5, 6, 10, // 8 2696 | 2, 3, 6, // 9 2697 | 0, 0, 0, // 10 2698 | 0, 1, 2, // 11 2699 | 0, 0, 0, // 12 2700 | 5, 6, 8, // 13 2701 | 0, 2, 4, // 14 2702 | 0, 1, 4, // 15 2703 | 0, 0, 3, // 16 2704 | 1, 5, 10, // 17 2705 | 1, 7, 13, // 18 2706 | 14, 33, 47, // 19 2707 | 0, 15, 24, // 20 2708 | 0, 8, 15, // 21 2709 | 3, 13, 24, // 22 2710 | 4, 26, 40, // 23 2711 | 6, 18, 27, // 24 2712 | 1, 12, 22, // 25 2713 | 2, 15, 22, // 26 2714 | 0, 1, 5, // 27 2715 | 0, 4, 7, // 28 2716 | 6, 9, 14, // 29 2717 | 1, 8, 13, // 30 2718 | 2, 15, 25, // 31 2719 | 2, 16, 29, // 32 2720 | 0, 10, 18, // 33 2721 | 6, 22, 33, // 34 2722 | 16, 9, 15, // 35 2723 | 69, 36, 50, // 36 2724 | 39, 77, 114, // 37 2725 | 5, 23, 33, // 38 2726 | 1, 5, 10, // 39 2727 | 10, 19, 25, // 40 2728 | 2, 10, 16, // 41 2729 | 0, 1, 4, // 42 2730 | 0, 7, 12, // 43 2731 | 0, 4, 9, // 44 2732 | 5, 17, 18, // 45 2733 | 0, 3, 4, // 46 2734 | 0, 3, 6, // 47 2735 | 0, 3, 4, // 48 2736 | 3, 7, 8, // 49 2737 | 0, 0, 1, // 50 2738 | 3, 9, 7, // 51 2739 | 0, 0, 0, // 52 2740 | 0, 1, 2, // 53 2741 | 0, 0, 1, // 54 2742 | 2, 2, 3, // 55 2743 | 1, 1, 2, // 56 2744 | 0, 0, 0, // 57 2745 | 0, 0, 1, // 58 2746 | 0, 1, 1, // 59 2747 | // Frame: 45 2748 | 3, 3, 6, // 0 2749 | 0, 0, 3, // 1 2750 | 4, 7, 9, // 2 2751 | 0, 0, 2, // 3 2752 | 0, 1, 5, // 4 2753 | 0, 1, 2, // 5 2754 | 0, 0, 0, // 6 2755 | 2, 3, 5, // 7 2756 | 2, 3, 5, // 8 2757 | 3, 4, 6, // 9 2758 | 0, 0, 0, // 10 2759 | 0, 0, 1, // 11 2760 | 0, 0, 0, // 12 2761 | 5, 5, 4, // 13 2762 | 2, 2, 6, // 14 2763 | 1, 2, 6, // 15 2764 | 0, 0, 4, // 16 2765 | 2, 5, 9, // 17 2766 | 1, 4, 9, // 18 2767 | 8, 21, 31, // 19 2768 | 7, 20, 29, // 20 2769 | 9, 19, 26, // 21 2770 | 0, 1, 4, // 22 2771 | 7, 15, 26, // 23 2772 | 5, 16, 25, // 24 2773 | 2, 15, 22, // 25 2774 | 1, 5, 10, // 26 2775 | 0, 1, 4, // 27 2776 | 7, 13, 16, // 28 2777 | 6, 13, 20, // 29 2778 | 0, 8, 13, // 30 2779 | 0, 7, 13, // 31 2780 | 0, 6, 11, // 32 2781 | 4, 10, 17, // 33 2782 | 6, 13, 20, // 34 2783 | 1, 5, 10, // 35 2784 | 31, 9, 12, // 36 2785 | 23, 0, 0, // 37 2786 | 7, 6, 10, // 38 2787 | 5, 16, 25, // 39 2788 | 2, 14, 23, // 40 2789 | 0, 0, 1, // 41 2790 | 0, 0, 3, // 42 2791 | 0, 0, 2, // 43 2792 | 0, 0, 1, // 44 2793 | 1, 10, 9, // 45 2794 | 0, 13, 14, // 46 2795 | 0, 7, 9, // 47 2796 | 0, 1, 3, // 48 2797 | 2, 4, 4, // 49 2798 | 1, 1, 2, // 50 2799 | 0, 1, 2, // 51 2800 | 0, 0, 0, // 52 2801 | 0, 0, 0, // 53 2802 | 0, 0, 0, // 54 2803 | 2, 2, 3, // 55 2804 | 1, 1, 2, // 56 2805 | 0, 0, 0, // 57 2806 | 0, 0, 1, // 58 2807 | 3, 2, 3, // 59 2808 | // Frame: 46 2809 | 3, 3, 6, // 0 2810 | 5, 6, 13, // 1 2811 | 0, 0, 1, // 2 2812 | 0, 0, 3, // 3 2813 | 0, 0, 3, // 4 2814 | 2, 2, 2, // 5 2815 | 0, 4, 6, // 6 2816 | 0, 0, 1, // 7 2817 | 0, 0, 1, // 8 2818 | 0, 0, 1, // 9 2819 | 0, 0, 0, // 10 2820 | 0, 0, 0, // 11 2821 | 0, 0, 0, // 12 2822 | 0, 0, 0, // 13 2823 | 0, 0, 1, // 14 2824 | 1, 1, 4, // 15 2825 | 6, 7, 13, // 16 2826 | 0, 1, 3, // 17 2827 | 4, 7, 12, // 18 2828 | 0, 0, 8, // 19 2829 | 8, 13, 22, // 20 2830 | 4, 18, 26, // 21 2831 | 9, 22, 33, // 22 2832 | 0, 3, 8, // 23 2833 | 0, 7, 14, // 24 2834 | 2, 7, 13, // 25 2835 | 5, 9, 14, // 26 2836 | 5, 7, 11, // 27 2837 | 0, 0, 1, // 28 2838 | 0, 1, 3, // 29 2839 | 0, 1, 5, // 30 2840 | 0, 9, 18, // 31 2841 | 9, 29, 42, // 32 2842 | 0, 6, 13, // 33 2843 | 0, 0, 2, // 34 2844 | 1, 2, 6, // 35 2845 | 2, 0, 2, // 36 2846 | 49, 6, 6, // 37 2847 | 25, 0, 2, // 38 2848 | 1, 1, 5, // 39 2849 | 1, 6, 10, // 40 2850 | 4, 10, 11, // 41 2851 | 2, 8, 10, // 42 2852 | 0, 0, 0, // 43 2853 | 0, 0, 1, // 44 2854 | 0, 0, 0, // 45 2855 | 0, 4, 4, // 46 2856 | 1, 3, 2, // 47 2857 | 1, 1, 1, // 48 2858 | 0, 0, 0, // 49 2859 | 0, 0, 0, // 50 2860 | 0, 0, 0, // 51 2861 | 1, 1, 2, // 52 2862 | 1, 1, 1, // 53 2863 | 2, 3, 3, // 54 2864 | 0, 0, 0, // 55 2865 | 1, 3, 3, // 56 2866 | 0, 8, 15, // 57 2867 | 4, 10, 11, // 58 2868 | 0, 0, 0, // 59 2869 | // Frame: 47 2870 | 0, 1, 2, // 0 2871 | 1, 1, 4, // 1 2872 | 1, 1, 4, // 2 2873 | 0, 1, 3, // 3 2874 | 0, 0, 1, // 4 2875 | 0, 0, 1, // 5 2876 | 0, 0, 0, // 6 2877 | 0, 0, 0, // 7 2878 | 1, 1, 4, // 8 2879 | 1, 2, 3, // 9 2880 | 0, 0, 0, // 10 2881 | 0, 0, 0, // 11 2882 | 0, 0, 0, // 12 2883 | 3, 1, 2, // 13 2884 | 0, 0, 2, // 14 2885 | 1, 2, 5, // 15 2886 | 1, 1, 5, // 16 2887 | 1, 2, 6, // 17 2888 | 1, 2, 6, // 18 2889 | 1, 4, 8, // 19 2890 | 6, 12, 18, // 20 2891 | 0, 1, 5, // 21 2892 | 1, 7, 11, // 22 2893 | 5, 24, 40, // 23 2894 | 11, 28, 41, // 24 2895 | 0, 3, 7, // 25 2896 | 1, 4, 9, // 26 2897 | 0, 1, 5, // 27 2898 | 1, 2, 6, // 28 2899 | 1, 3, 9, // 29 2900 | 0, 1, 5, // 30 2901 | 4, 9, 13, // 31 2902 | 0, 2, 6, // 32 2903 | 1, 3, 6, // 33 2904 | 1, 3, 5, // 34 2905 | 0, 0, 2, // 35 2906 | 1, 1, 3, // 36 2907 | 13, 1, 3, // 37 2908 | 49, 5, 5, // 38 2909 | 69, 98, 129, // 39 2910 | 2, 5, 10, // 40 2911 | 4, 10, 13, // 41 2912 | 0, 0, 1, // 42 2913 | 1, 5, 6, // 43 2914 | 40, 46, 39, // 44 2915 | 0, 0, 0, // 45 2916 | 0, 0, 1, // 46 2917 | 0, 0, 1, // 47 2918 | 0, 0, 0, // 48 2919 | 0, 0, 0, // 49 2920 | 0, 0, 0, // 50 2921 | 0, 0, 0, // 51 2922 | 0, 1, 2, // 52 2923 | 0, 1, 2, // 53 2924 | 0, 0, 1, // 54 2925 | 1, 2, 3, // 55 2926 | 0, 0, 1, // 56 2927 | 17, 106, 164, // 57 2928 | 0, 14, 17, // 58 2929 | 3, 9, 9, // 59 2930 | // Frame: 48 2931 | 2, 3, 6, // 0 2932 | 0, 0, 0, // 1 2933 | 3, 5, 8, // 2 2934 | 3, 4, 6, // 3 2935 | 0, 0, 3, // 4 2936 | 0, 0, 0, // 5 2937 | 0, 0, 1, // 6 2938 | 3, 5, 5, // 7 2939 | 0, 1, 2, // 8 2940 | 0, 0, 0, // 9 2941 | 0, 0, 0, // 10 2942 | 0, 0, 0, // 11 2943 | 0, 0, 0, // 12 2944 | 2, 2, 5, // 13 2945 | 3, 4, 6, // 14 2946 | 1, 1, 4, // 15 2947 | 0, 0, 1, // 16 2948 | 5, 7, 11, // 17 2949 | 1, 2, 7, // 18 2950 | 6, 9, 14, // 19 2951 | 0, 0, 1, // 20 2952 | 1, 5, 9, // 21 2953 | 0, 4, 10, // 22 2954 | 14, 43, 64, // 23 2955 | 7, 16, 22, // 24 2956 | 0, 9, 15, // 25 2957 | 1, 4, 9, // 26 2958 | 0, 0, 3, // 27 2959 | 2, 3, 7, // 28 2960 | 3, 5, 11, // 29 2961 | 0, 0, 4, // 30 2962 | 0, 0, 2, // 31 2963 | 0, 1, 4, // 32 2964 | 0, 1, 3, // 33 2965 | 4, 5, 7, // 34 2966 | 0, 0, 3, // 35 2967 | 1, 1, 4, // 36 2968 | 0, 0, 0, // 37 2969 | 31, 4, 6, // 38 2970 | 33, 1, 1, // 39 2971 | 15, 5, 7, // 40 2972 | 0, 0, 0, // 41 2973 | 6, 7, 9, // 42 2974 | 1, 2, 2, // 43 2975 | 7, 7, 5, // 44 2976 | 0, 0, 0, // 45 2977 | 9, 9, 9, // 46 2978 | 0, 0, 0, // 47 2979 | 0, 0, 0, // 48 2980 | 0, 0, 0, // 49 2981 | 0, 0, 0, // 50 2982 | 0, 0, 0, // 51 2983 | 0, 0, 0, // 52 2984 | 0, 0, 0, // 53 2985 | 0, 0, 0, // 54 2986 | 0, 0, 0, // 55 2987 | 0, 0, 0, // 56 2988 | 1, 3, 2, // 57 2989 | 0, 1, 0, // 58 2990 | 1, 2, 1, // 59 2991 | // Frame: 49 2992 | 3, 5, 7, // 0 2993 | 0, 0, 1, // 1 2994 | 2, 3, 6, // 2 2995 | 5, 6, 8, // 3 2996 | 2, 3, 6, // 4 2997 | 0, 0, 1, // 5 2998 | 0, 1, 3, // 6 2999 | 0, 0, 0, // 7 3000 | 0, 0, 0, // 8 3001 | 0, 0, 0, // 9 3002 | 0, 0, 0, // 10 3003 | 0, 0, 0, // 11 3004 | 0, 0, 0, // 12 3005 | 5, 7, 9, // 13 3006 | 0, 1, 3, // 14 3007 | 1, 2, 4, // 15 3008 | 0, 0, 1, // 16 3009 | 4, 6, 11, // 17 3010 | 2, 3, 7, // 18 3011 | 1, 7, 10, // 19 3012 | 2, 4, 9, // 20 3013 | 0, 2, 6, // 21 3014 | 6, 14, 19, // 22 3015 | 15, 31, 41, // 23 3016 | 2, 11, 17, // 24 3017 | 0, 2, 6, // 25 3018 | 0, 0, 1, // 26 3019 | 0, 1, 4, // 27 3020 | 4, 6, 12, // 28 3021 | 1, 3, 9, // 29 3022 | 6, 9, 13, // 30 3023 | 0, 0, 2, // 31 3024 | 0, 2, 4, // 32 3025 | 0, 0, 1, // 33 3026 | 6, 6, 10, // 34 3027 | 1, 2, 4, // 35 3028 | 2, 3, 6, // 36 3029 | 0, 0, 0, // 37 3030 | 15, 10, 10, // 38 3031 | 39, 3, 3, // 39 3032 | 28, 2, 2, // 40 3033 | 0, 0, 0, // 41 3034 | 0, 0, 0, // 42 3035 | 0, 0, 0, // 43 3036 | 0, 0, 0, // 44 3037 | 0, 0, 0, // 45 3038 | 0, 0, 0, // 46 3039 | 0, 0, 0, // 47 3040 | 0, 0, 0, // 48 3041 | 0, 0, 0, // 49 3042 | 0, 0, 0, // 50 3043 | 0, 0, 0, // 51 3044 | 0, 0, 0, // 52 3045 | 0, 0, 0, // 53 3046 | 0, 0, 0, // 54 3047 | 1, 1, 1, // 55 3048 | 0, 1, 1, // 56 3049 | 0, 0, 0, // 57 3050 | 0, 0, 0, // 58 3051 | 3, 3, 6, // 59 3052 | // Frame: 50 3053 | 2, 2, 5, // 0 3054 | 7, 8, 10, // 1 3055 | 0, 0, 2, // 2 3056 | 0, 1, 3, // 3 3057 | 0, 0, 1, // 4 3058 | 5, 7, 7, // 5 3059 | 0, 6, 6, // 6 3060 | 0, 0, 0, // 7 3061 | 0, 0, 0, // 8 3062 | 0, 0, 0, // 9 3063 | 0, 0, 0, // 10 3064 | 0, 0, 2, // 11 3065 | 2, 3, 4, // 12 3066 | 0, 0, 1, // 13 3067 | 0, 0, 2, // 14 3068 | 2, 3, 7, // 15 3069 | 4, 4, 11, // 16 3070 | 1, 2, 5, // 17 3071 | 0, 0, 3, // 18 3072 | 0, 3, 7, // 19 3073 | 2, 4, 9, // 20 3074 | 1, 2, 7, // 21 3075 | 3, 7, 13, // 22 3076 | 0, 2, 6, // 23 3077 | 1, 2, 7, // 24 3078 | 0, 1, 3, // 25 3079 | 3, 4, 7, // 26 3080 | 3, 5, 7, // 27 3081 | 0, 0, 3, // 28 3082 | 0, 1, 4, // 29 3083 | 0, 1, 5, // 30 3084 | 2, 4, 7, // 31 3085 | 4, 6, 10, // 32 3086 | 22, 42, 47, // 33 3087 | 0, 0, 2, // 34 3088 | 2, 2, 5, // 35 3089 | 2, 2, 4, // 36 3090 | 2, 2, 5, // 37 3091 | 0, 2, 4, // 38 3092 | 12, 1, 2, // 39 3093 | 34, 0, 0, // 40 3094 | 11, 0, 0, // 41 3095 | 0, 0, 0, // 42 3096 | 0, 0, 0, // 43 3097 | 1, 1, 1, // 44 3098 | 0, 0, 0, // 45 3099 | 1, 1, 1, // 46 3100 | 0, 1, 1, // 47 3101 | 0, 0, 0, // 48 3102 | 0, 0, 0, // 49 3103 | 1, 4, 21, // 50 3104 | 1, 1, 1, // 51 3105 | 1, 1, 1, // 52 3106 | 1, 1, 0, // 53 3107 | 1, 1, 0, // 54 3108 | 0, 0, 0, // 55 3109 | 0, 1, 0, // 56 3110 | 0, 0, 0, // 57 3111 | 0, 0, 0, // 58 3112 | 0, 5, 14, // 59 3113 | // Frame: 51 3114 | 0, 1, 2, // 0 3115 | 1, 2, 3, // 1 3116 | 2, 3, 5, // 2 3117 | 0, 0, 0, // 3 3118 | 0, 0, 1, // 4 3119 | 7, 8, 10, // 5 3120 | 2, 3, 6, // 6 3121 | 1, 2, 4, // 7 3122 | 0, 0, 0, // 8 3123 | 0, 0, 0, // 9 3124 | 2, 2, 2, // 10 3125 | 1, 1, 3, // 11 3126 | 1, 1, 3, // 12 3127 | 0, 0, 1, // 13 3128 | 0, 1, 3, // 14 3129 | 0, 1, 4, // 15 3130 | 2, 2, 6, // 16 3131 | 0, 0, 1, // 17 3132 | 1, 0, 4, // 18 3133 | 0, 0, 2, // 19 3134 | 6, 7, 12, // 20 3135 | 1, 4, 7, // 21 3136 | 5, 9, 15, // 22 3137 | 0, 3, 7, // 23 3138 | 3, 3, 9, // 24 3139 | 1, 2, 4, // 25 3140 | 17, 20, 24, // 26 3141 | 5, 7, 11, // 27 3142 | 0, 0, 3, // 28 3143 | 5, 6, 11, // 29 3144 | 0, 0, 1, // 30 3145 | 3, 8, 9, // 31 3146 | 0, 3, 4, // 32 3147 | 55, 117, 145, // 33 3148 | 0, 0, 0, // 34 3149 | 6, 9, 12, // 35 3150 | 3, 3, 7, // 36 3151 | 2, 4, 4, // 37 3152 | 36, 121, 171, // 38 3153 | 0, 0, 0, // 39 3154 | 16, 0, 0, // 40 3155 | 39, 1, 1, // 41 3156 | 3, 0, 0, // 42 3157 | 0, 0, 0, // 43 3158 | 0, 0, 0, // 44 3159 | 0, 0, 0, // 45 3160 | 2, 2, 2, // 46 3161 | 0, 0, 0, // 47 3162 | 0, 0, 0, // 48 3163 | 0, 0, 0, // 49 3164 | 0, 0, 0, // 50 3165 | 0, 0, 0, // 51 3166 | 0, 0, 0, // 52 3167 | 0, 0, 0, // 53 3168 | 0, 0, 0, // 54 3169 | 0, 0, 0, // 55 3170 | 0, 0, 0, // 56 3171 | 0, 0, 0, // 57 3172 | 4, 3, 4, // 58 3173 | 0, 0, 0, // 59 3174 | // Frame: 52 3175 | 0, 0, 1, // 0 3176 | 0, 0, 2, // 1 3177 | 0, 0, 2, // 2 3178 | 4, 4, 6, // 3 3179 | 5, 8, 9, // 4 3180 | 0, 0, 0, // 5 3181 | 0, 0, 1, // 6 3182 | 18, 19, 22, // 7 3183 | 0, 0, 0, // 8 3184 | 0, 0, 0, // 9 3185 | 0, 0, 0, // 10 3186 | 0, 0, 0, // 11 3187 | 1, 1, 0, // 12 3188 | 1, 2, 4, // 13 3189 | 2, 3, 6, // 14 3190 | 0, 1, 4, // 15 3191 | 0, 1, 3, // 16 3192 | 4, 6, 10, // 17 3193 | 2, 4, 7, // 18 3194 | 3, 5, 9, // 19 3195 | 3, 6, 10, // 20 3196 | 0, 1, 4, // 21 3197 | 1, 2, 6, // 22 3198 | 10, 18, 28, // 23 3199 | 9, 14, 20, // 24 3200 | 17, 24, 30, // 25 3201 | 1, 4, 8, // 26 3202 | 0, 0, 2, // 27 3203 | 5, 7, 12, // 28 3204 | 2, 3, 7, // 29 3205 | 5, 5, 9, // 30 3206 | 0, 0, 1, // 31 3207 | 0, 0, 3, // 32 3208 | 0, 0, 1, // 33 3209 | 9, 9, 13, // 34 3210 | 1, 1, 3, // 35 3211 | 4, 5, 6, // 36 3212 | 1, 1, 2, // 37 3213 | 3, 3, 4, // 38 3214 | 0, 0, 1, // 39 3215 | 3, 1, 1, // 40 3216 | 39, 1, 0, // 41 3217 | 24, 1, 0, // 42 3218 | 1, 0, 0, // 43 3219 | 0, 0, 0, // 44 3220 | 0, 0, 0, // 45 3221 | 0, 0, 0, // 46 3222 | 0, 0, 0, // 47 3223 | 0, 0, 0, // 48 3224 | 0, 0, 0, // 49 3225 | 0, 0, 0, // 50 3226 | 0, 0, 0, // 51 3227 | 0, 0, 0, // 52 3228 | 0, 0, 0, // 53 3229 | 0, 0, 0, // 54 3230 | 0, 0, 0, // 55 3231 | 0, 0, 1, // 56 3232 | 0, 0, 0, // 57 3233 | 0, 0, 0, // 58 3234 | 0, 0, 0, // 59 3235 | // Frame: 53 3236 | 3, 3, 4, // 0 3237 | 1, 1, 3, // 1 3238 | 0, 1, 3, // 2 3239 | 0, 1, 2, // 3 3240 | 0, 2, 5, // 4 3241 | 1, 1, 2, // 5 3242 | 1, 2, 4, // 6 3243 | 0, 0, 3, // 7 3244 | 1, 3, 3, // 8 3245 | 0, 2, 4, // 9 3246 | 0, 1, 3, // 10 3247 | 0, 0, 2, // 11 3248 | 0, 1, 3, // 12 3249 | 1, 1, 1, // 13 3250 | 1, 2, 4, // 14 3251 | 1, 1, 5, // 15 3252 | 1, 1, 4, // 16 3253 | 0, 0, 1, // 17 3254 | 1, 2, 6, // 18 3255 | 3, 4, 9, // 19 3256 | 0, 1, 4, // 20 3257 | 4, 5, 10, // 21 3258 | 1, 2, 5, // 22 3259 | 0, 0, 3, // 23 3260 | 1, 2, 6, // 24 3261 | 3, 10, 18, // 25 3262 | 2, 3, 9, // 26 3263 | 3, 7, 13, // 27 3264 | 0, 1, 5, // 28 3265 | 1, 2, 7, // 29 3266 | 0, 1, 4, // 30 3267 | 0, 1, 4, // 31 3268 | 0, 1, 4, // 32 3269 | 2, 2, 5, // 33 3270 | 1, 3, 4, // 34 3271 | 0, 1, 2, // 35 3272 | 0, 1, 1, // 36 3273 | 0, 0, 1, // 37 3274 | 1, 2, 3, // 38 3275 | 1, 1, 2, // 39 3276 | 1, 1, 1, // 40 3277 | 10, 0, 0, // 41 3278 | 43, 1, 0, // 42 3279 | 16, 0, 0, // 43 3280 | 0, 0, 0, // 44 3281 | 0, 0, 0, // 45 3282 | 0, 0, 0, // 46 3283 | 10, 10, 9, // 47 3284 | 0, 0, 0, // 48 3285 | 0, 0, 0, // 49 3286 | 0, 0, 0, // 50 3287 | 0, 0, 0, // 51 3288 | 0, 0, 0, // 52 3289 | 0, 0, 0, // 53 3290 | 0, 0, 0, // 54 3291 | 0, 0, 0, // 55 3292 | 0, 0, 0, // 56 3293 | 0, 0, 0, // 57 3294 | 0, 0, 0, // 58 3295 | 0, 0, 0, // 59 3296 | }; 3297 | 3298 | Animation animation(54, animationData, ENCODING_RGB24, 60); -------------------------------------------------------------------------------- /patterns/arduino/shadow.h: -------------------------------------------------------------------------------- 1 | const uint8_t animationData[] PROGMEM = { 2 | // Frame: 0 3 | 255, 0, 35, // 0 4 | 0, 0, 0, // 1 5 | 0, 0, 0, // 2 6 | 0, 0, 0, // 3 7 | 0, 0, 0, // 4 8 | 0, 0, 0, // 5 9 | 47, 0, 255, // 6 10 | 47, 0, 255, // 7 11 | 0, 0, 0, // 8 12 | 0, 0, 0, // 9 13 | 0, 0, 0, // 10 14 | 0, 0, 0, // 11 15 | 0, 0, 0, // 12 16 | 255, 0, 35, // 13 17 | 0, 0, 0, // 14 18 | 0, 0, 0, // 15 19 | 0, 0, 0, // 16 20 | 0, 0, 0, // 17 21 | 0, 0, 0, // 18 22 | 47, 0, 255, // 19 23 | 0, 0, 0, // 20 24 | 0, 0, 0, // 21 25 | 0, 0, 0, // 22 26 | 0, 0, 0, // 23 27 | 0, 0, 0, // 24 28 | 0, 0, 0, // 25 29 | 255, 0, 35, // 26 30 | 0, 0, 0, // 27 31 | 0, 0, 0, // 28 32 | 0, 0, 0, // 29 33 | 0, 0, 0, // 30 34 | 0, 0, 0, // 31 35 | 47, 0, 255, // 32 36 | 0, 0, 0, // 33 37 | 0, 0, 0, // 34 38 | 0, 0, 0, // 35 39 | 0, 0, 0, // 36 40 | 0, 0, 0, // 37 41 | 0, 0, 0, // 38 42 | 255, 0, 35, // 39 43 | 0, 0, 0, // 40 44 | 0, 0, 0, // 41 45 | 0, 0, 0, // 42 46 | 0, 0, 0, // 43 47 | 0, 0, 0, // 44 48 | 47, 0, 255, // 45 49 | 0, 0, 0, // 46 50 | 0, 0, 0, // 47 51 | 0, 0, 0, // 48 52 | 0, 0, 0, // 49 53 | 0, 0, 0, // 50 54 | 255, 0, 35, // 51 55 | 255, 0, 35, // 52 56 | 0, 0, 0, // 53 57 | 0, 0, 0, // 54 58 | 0, 0, 0, // 55 59 | 0, 0, 0, // 56 60 | 0, 0, 0, // 57 61 | 47, 0, 255, // 58 62 | 0, 0, 0, // 59 63 | // Frame: 1 64 | 0, 0, 0, // 0 65 | 255, 0, 35, // 1 66 | 0, 0, 0, // 2 67 | 0, 0, 0, // 3 68 | 0, 0, 0, // 4 69 | 0, 0, 0, // 5 70 | 0, 0, 0, // 6 71 | 0, 0, 0, // 7 72 | 47, 0, 255, // 8 73 | 0, 0, 0, // 9 74 | 0, 0, 0, // 10 75 | 0, 0, 0, // 11 76 | 0, 0, 0, // 12 77 | 0, 0, 0, // 13 78 | 255, 0, 35, // 14 79 | 0, 0, 0, // 15 80 | 0, 0, 0, // 16 81 | 0, 0, 0, // 17 82 | 0, 0, 0, // 18 83 | 0, 0, 0, // 19 84 | 47, 0, 255, // 20 85 | 0, 0, 0, // 21 86 | 0, 0, 0, // 22 87 | 0, 0, 0, // 23 88 | 0, 0, 0, // 24 89 | 0, 0, 0, // 25 90 | 0, 0, 0, // 26 91 | 255, 0, 35, // 27 92 | 0, 0, 0, // 28 93 | 0, 0, 0, // 29 94 | 0, 0, 0, // 30 95 | 0, 0, 0, // 31 96 | 0, 0, 0, // 32 97 | 47, 0, 255, // 33 98 | 0, 0, 0, // 34 99 | 0, 0, 0, // 35 100 | 0, 0, 0, // 36 101 | 0, 0, 0, // 37 102 | 0, 0, 0, // 38 103 | 0, 0, 0, // 39 104 | 255, 0, 35, // 40 105 | 0, 0, 0, // 41 106 | 0, 0, 0, // 42 107 | 0, 0, 0, // 43 108 | 0, 0, 0, // 44 109 | 0, 0, 0, // 45 110 | 47, 0, 255, // 46 111 | 0, 0, 0, // 47 112 | 0, 0, 0, // 48 113 | 0, 0, 0, // 49 114 | 0, 0, 0, // 50 115 | 0, 0, 0, // 51 116 | 0, 0, 0, // 52 117 | 255, 0, 35, // 53 118 | 0, 0, 0, // 54 119 | 0, 0, 0, // 55 120 | 0, 0, 0, // 56 121 | 0, 0, 0, // 57 122 | 0, 0, 0, // 58 123 | 47, 0, 255, // 59 124 | // Frame: 2 125 | 0, 0, 0, // 0 126 | 0, 0, 0, // 1 127 | 255, 0, 35, // 2 128 | 0, 0, 0, // 3 129 | 0, 0, 0, // 4 130 | 0, 0, 0, // 5 131 | 0, 0, 0, // 6 132 | 0, 0, 0, // 7 133 | 0, 0, 0, // 8 134 | 47, 0, 255, // 9 135 | 0, 0, 0, // 10 136 | 0, 0, 0, // 11 137 | 0, 0, 0, // 12 138 | 0, 0, 0, // 13 139 | 0, 0, 0, // 14 140 | 255, 0, 35, // 15 141 | 0, 0, 0, // 16 142 | 0, 0, 0, // 17 143 | 0, 0, 0, // 18 144 | 0, 0, 0, // 19 145 | 0, 0, 0, // 20 146 | 47, 0, 255, // 21 147 | 47, 0, 255, // 22 148 | 0, 0, 0, // 23 149 | 0, 0, 0, // 24 150 | 0, 0, 0, // 25 151 | 0, 0, 0, // 26 152 | 0, 0, 0, // 27 153 | 255, 0, 35, // 28 154 | 0, 0, 0, // 29 155 | 0, 0, 0, // 30 156 | 0, 0, 0, // 31 157 | 0, 0, 0, // 32 158 | 0, 0, 0, // 33 159 | 47, 0, 255, // 34 160 | 0, 0, 0, // 35 161 | 0, 0, 0, // 36 162 | 0, 0, 0, // 37 163 | 0, 0, 0, // 38 164 | 0, 0, 0, // 39 165 | 0, 0, 0, // 40 166 | 255, 0, 35, // 41 167 | 0, 0, 0, // 42 168 | 0, 0, 0, // 43 169 | 0, 0, 0, // 44 170 | 0, 0, 0, // 45 171 | 0, 0, 0, // 46 172 | 47, 0, 255, // 47 173 | 0, 0, 0, // 48 174 | 0, 0, 0, // 49 175 | 0, 0, 0, // 50 176 | 0, 0, 0, // 51 177 | 0, 0, 0, // 52 178 | 0, 0, 0, // 53 179 | 255, 0, 35, // 54 180 | 0, 0, 0, // 55 181 | 0, 0, 0, // 56 182 | 0, 0, 0, // 57 183 | 0, 0, 0, // 58 184 | 0, 0, 0, // 59 185 | // Frame: 3 186 | 0, 0, 0, // 0 187 | 0, 0, 0, // 1 188 | 0, 0, 0, // 2 189 | 255, 0, 35, // 3 190 | 0, 0, 0, // 4 191 | 0, 0, 0, // 5 192 | 0, 0, 0, // 6 193 | 0, 0, 0, // 7 194 | 0, 0, 0, // 8 195 | 0, 0, 0, // 9 196 | 47, 0, 255, // 10 197 | 0, 0, 0, // 11 198 | 0, 0, 0, // 12 199 | 0, 0, 0, // 13 200 | 0, 0, 0, // 14 201 | 0, 0, 0, // 15 202 | 255, 0, 35, // 16 203 | 0, 0, 0, // 17 204 | 0, 0, 0, // 18 205 | 0, 0, 0, // 19 206 | 0, 0, 0, // 20 207 | 0, 0, 0, // 21 208 | 0, 0, 0, // 22 209 | 47, 0, 255, // 23 210 | 0, 0, 0, // 24 211 | 0, 0, 0, // 25 212 | 0, 0, 0, // 26 213 | 0, 0, 0, // 27 214 | 0, 0, 0, // 28 215 | 255, 0, 35, // 29 216 | 0, 0, 0, // 30 217 | 0, 0, 0, // 31 218 | 0, 0, 0, // 32 219 | 0, 0, 0, // 33 220 | 0, 0, 0, // 34 221 | 47, 0, 255, // 35 222 | 0, 0, 0, // 36 223 | 0, 0, 0, // 37 224 | 0, 0, 0, // 38 225 | 0, 0, 0, // 39 226 | 0, 0, 0, // 40 227 | 0, 0, 0, // 41 228 | 255, 0, 35, // 42 229 | 0, 0, 0, // 43 230 | 0, 0, 0, // 44 231 | 0, 0, 0, // 45 232 | 0, 0, 0, // 46 233 | 0, 0, 0, // 47 234 | 47, 0, 255, // 48 235 | 0, 0, 0, // 49 236 | 0, 0, 0, // 50 237 | 0, 0, 0, // 51 238 | 0, 0, 0, // 52 239 | 0, 0, 0, // 53 240 | 0, 0, 0, // 54 241 | 255, 0, 35, // 55 242 | 0, 0, 0, // 56 243 | 0, 0, 0, // 57 244 | 0, 0, 0, // 58 245 | 0, 0, 0, // 59 246 | // Frame: 4 247 | 0, 0, 0, // 0 248 | 0, 0, 0, // 1 249 | 0, 0, 0, // 2 250 | 0, 0, 0, // 3 251 | 255, 0, 35, // 4 252 | 0, 0, 0, // 5 253 | 0, 0, 0, // 6 254 | 0, 0, 0, // 7 255 | 0, 0, 0, // 8 256 | 0, 0, 0, // 9 257 | 0, 0, 0, // 10 258 | 47, 0, 255, // 11 259 | 0, 0, 0, // 12 260 | 0, 0, 0, // 13 261 | 0, 0, 0, // 14 262 | 0, 0, 0, // 15 263 | 0, 0, 0, // 16 264 | 255, 0, 35, // 17 265 | 0, 0, 0, // 18 266 | 0, 0, 0, // 19 267 | 0, 0, 0, // 20 268 | 0, 0, 0, // 21 269 | 0, 0, 0, // 22 270 | 0, 0, 0, // 23 271 | 47, 0, 255, // 24 272 | 0, 0, 0, // 25 273 | 0, 0, 0, // 26 274 | 0, 0, 0, // 27 275 | 0, 0, 0, // 28 276 | 0, 0, 0, // 29 277 | 255, 0, 35, // 30 278 | 0, 0, 0, // 31 279 | 0, 0, 0, // 32 280 | 0, 0, 0, // 33 281 | 0, 0, 0, // 34 282 | 0, 0, 0, // 35 283 | 47, 0, 255, // 36 284 | 47, 0, 255, // 37 285 | 0, 0, 0, // 38 286 | 0, 0, 0, // 39 287 | 0, 0, 0, // 40 288 | 0, 0, 0, // 41 289 | 0, 0, 0, // 42 290 | 255, 0, 35, // 43 291 | 0, 0, 0, // 44 292 | 0, 0, 0, // 45 293 | 0, 0, 0, // 46 294 | 0, 0, 0, // 47 295 | 0, 0, 0, // 48 296 | 47, 0, 255, // 49 297 | 0, 0, 0, // 50 298 | 0, 0, 0, // 51 299 | 0, 0, 0, // 52 300 | 0, 0, 0, // 53 301 | 0, 0, 0, // 54 302 | 0, 0, 0, // 55 303 | 255, 0, 35, // 56 304 | 0, 0, 0, // 57 305 | 0, 0, 0, // 58 306 | 0, 0, 0, // 59 307 | // Frame: 5 308 | 0, 0, 0, // 0 309 | 0, 0, 0, // 1 310 | 0, 0, 0, // 2 311 | 0, 0, 0, // 3 312 | 0, 0, 0, // 4 313 | 255, 0, 35, // 5 314 | 0, 0, 0, // 6 315 | 0, 0, 0, // 7 316 | 0, 0, 0, // 8 317 | 0, 0, 0, // 9 318 | 0, 0, 0, // 10 319 | 0, 0, 0, // 11 320 | 47, 0, 255, // 12 321 | 0, 0, 0, // 13 322 | 0, 0, 0, // 14 323 | 0, 0, 0, // 15 324 | 0, 0, 0, // 16 325 | 0, 0, 0, // 17 326 | 255, 0, 35, // 18 327 | 0, 0, 0, // 19 328 | 0, 0, 0, // 20 329 | 0, 0, 0, // 21 330 | 0, 0, 0, // 22 331 | 0, 0, 0, // 23 332 | 0, 0, 0, // 24 333 | 47, 0, 255, // 25 334 | 0, 0, 0, // 26 335 | 0, 0, 0, // 27 336 | 0, 0, 0, // 28 337 | 0, 0, 0, // 29 338 | 0, 0, 0, // 30 339 | 255, 0, 35, // 31 340 | 0, 0, 0, // 32 341 | 0, 0, 0, // 33 342 | 0, 0, 0, // 34 343 | 0, 0, 0, // 35 344 | 0, 0, 0, // 36 345 | 0, 0, 0, // 37 346 | 47, 0, 255, // 38 347 | 0, 0, 0, // 39 348 | 0, 0, 0, // 40 349 | 0, 0, 0, // 41 350 | 0, 0, 0, // 42 351 | 0, 0, 0, // 43 352 | 255, 0, 35, // 44 353 | 0, 0, 0, // 45 354 | 0, 0, 0, // 46 355 | 0, 0, 0, // 47 356 | 0, 0, 0, // 48 357 | 0, 0, 0, // 49 358 | 47, 0, 255, // 50 359 | 0, 0, 0, // 51 360 | 0, 0, 0, // 52 361 | 0, 0, 0, // 53 362 | 0, 0, 0, // 54 363 | 0, 0, 0, // 55 364 | 0, 0, 0, // 56 365 | 255, 0, 35, // 57 366 | 0, 0, 0, // 58 367 | 0, 0, 0, // 59 368 | // Frame: 6 369 | 47, 0, 255, // 0 370 | 0, 0, 0, // 1 371 | 0, 0, 0, // 2 372 | 0, 0, 0, // 3 373 | 0, 0, 0, // 4 374 | 0, 0, 0, // 5 375 | 255, 0, 35, // 6 376 | 255, 0, 35, // 7 377 | 0, 0, 0, // 8 378 | 0, 0, 0, // 9 379 | 0, 0, 0, // 10 380 | 0, 0, 0, // 11 381 | 0, 0, 0, // 12 382 | 47, 0, 255, // 13 383 | 0, 0, 0, // 14 384 | 0, 0, 0, // 15 385 | 0, 0, 0, // 16 386 | 0, 0, 0, // 17 387 | 0, 0, 0, // 18 388 | 255, 0, 35, // 19 389 | 0, 0, 0, // 20 390 | 0, 0, 0, // 21 391 | 0, 0, 0, // 22 392 | 0, 0, 0, // 23 393 | 0, 0, 0, // 24 394 | 0, 0, 0, // 25 395 | 47, 0, 255, // 26 396 | 0, 0, 0, // 27 397 | 0, 0, 0, // 28 398 | 0, 0, 0, // 29 399 | 0, 0, 0, // 30 400 | 0, 0, 0, // 31 401 | 255, 0, 35, // 32 402 | 0, 0, 0, // 33 403 | 0, 0, 0, // 34 404 | 0, 0, 0, // 35 405 | 0, 0, 0, // 36 406 | 0, 0, 0, // 37 407 | 0, 0, 0, // 38 408 | 47, 0, 255, // 39 409 | 0, 0, 0, // 40 410 | 0, 0, 0, // 41 411 | 0, 0, 0, // 42 412 | 0, 0, 0, // 43 413 | 0, 0, 0, // 44 414 | 255, 0, 35, // 45 415 | 0, 0, 0, // 46 416 | 0, 0, 0, // 47 417 | 0, 0, 0, // 48 418 | 0, 0, 0, // 49 419 | 0, 0, 0, // 50 420 | 47, 0, 255, // 51 421 | 47, 0, 255, // 52 422 | 0, 0, 0, // 53 423 | 0, 0, 0, // 54 424 | 0, 0, 0, // 55 425 | 0, 0, 0, // 56 426 | 0, 0, 0, // 57 427 | 255, 0, 35, // 58 428 | 0, 0, 0, // 59 429 | // Frame: 7 430 | 0, 0, 0, // 0 431 | 47, 0, 255, // 1 432 | 0, 0, 0, // 2 433 | 0, 0, 0, // 3 434 | 0, 0, 0, // 4 435 | 0, 0, 0, // 5 436 | 0, 0, 0, // 6 437 | 0, 0, 0, // 7 438 | 255, 0, 35, // 8 439 | 0, 0, 0, // 9 440 | 0, 0, 0, // 10 441 | 0, 0, 0, // 11 442 | 0, 0, 0, // 12 443 | 0, 0, 0, // 13 444 | 47, 0, 255, // 14 445 | 0, 0, 0, // 15 446 | 0, 0, 0, // 16 447 | 0, 0, 0, // 17 448 | 0, 0, 0, // 18 449 | 0, 0, 0, // 19 450 | 255, 0, 35, // 20 451 | 0, 0, 0, // 21 452 | 0, 0, 0, // 22 453 | 0, 0, 0, // 23 454 | 0, 0, 0, // 24 455 | 0, 0, 0, // 25 456 | 0, 0, 0, // 26 457 | 47, 0, 255, // 27 458 | 0, 0, 0, // 28 459 | 0, 0, 0, // 29 460 | 0, 0, 0, // 30 461 | 0, 0, 0, // 31 462 | 0, 0, 0, // 32 463 | 255, 0, 35, // 33 464 | 0, 0, 0, // 34 465 | 0, 0, 0, // 35 466 | 0, 0, 0, // 36 467 | 0, 0, 0, // 37 468 | 0, 0, 0, // 38 469 | 0, 0, 0, // 39 470 | 47, 0, 255, // 40 471 | 0, 0, 0, // 41 472 | 0, 0, 0, // 42 473 | 0, 0, 0, // 43 474 | 0, 0, 0, // 44 475 | 0, 0, 0, // 45 476 | 255, 0, 35, // 46 477 | 0, 0, 0, // 47 478 | 0, 0, 0, // 48 479 | 0, 0, 0, // 49 480 | 0, 0, 0, // 50 481 | 0, 0, 0, // 51 482 | 0, 0, 0, // 52 483 | 47, 0, 255, // 53 484 | 0, 0, 0, // 54 485 | 0, 0, 0, // 55 486 | 0, 0, 0, // 56 487 | 0, 0, 0, // 57 488 | 0, 0, 0, // 58 489 | 255, 0, 35, // 59 490 | // Frame: 8 491 | 0, 0, 0, // 0 492 | 0, 0, 0, // 1 493 | 47, 0, 255, // 2 494 | 0, 0, 0, // 3 495 | 0, 0, 0, // 4 496 | 0, 0, 0, // 5 497 | 0, 0, 0, // 6 498 | 0, 0, 0, // 7 499 | 0, 0, 0, // 8 500 | 255, 0, 35, // 9 501 | 0, 0, 0, // 10 502 | 0, 0, 0, // 11 503 | 0, 0, 0, // 12 504 | 0, 0, 0, // 13 505 | 0, 0, 0, // 14 506 | 47, 0, 255, // 15 507 | 0, 0, 0, // 16 508 | 0, 0, 0, // 17 509 | 0, 0, 0, // 18 510 | 0, 0, 0, // 19 511 | 0, 0, 0, // 20 512 | 255, 0, 35, // 21 513 | 255, 0, 35, // 22 514 | 0, 0, 0, // 23 515 | 0, 0, 0, // 24 516 | 0, 0, 0, // 25 517 | 0, 0, 0, // 26 518 | 0, 0, 0, // 27 519 | 47, 0, 255, // 28 520 | 0, 0, 0, // 29 521 | 0, 0, 0, // 30 522 | 0, 0, 0, // 31 523 | 0, 0, 0, // 32 524 | 0, 0, 0, // 33 525 | 255, 0, 35, // 34 526 | 0, 0, 0, // 35 527 | 0, 0, 0, // 36 528 | 0, 0, 0, // 37 529 | 0, 0, 0, // 38 530 | 0, 0, 0, // 39 531 | 0, 0, 0, // 40 532 | 47, 0, 255, // 41 533 | 0, 0, 0, // 42 534 | 0, 0, 0, // 43 535 | 0, 0, 0, // 44 536 | 0, 0, 0, // 45 537 | 0, 0, 0, // 46 538 | 255, 0, 35, // 47 539 | 0, 0, 0, // 48 540 | 0, 0, 0, // 49 541 | 0, 0, 0, // 50 542 | 0, 0, 0, // 51 543 | 0, 0, 0, // 52 544 | 0, 0, 0, // 53 545 | 47, 0, 255, // 54 546 | 0, 0, 0, // 55 547 | 0, 0, 0, // 56 548 | 0, 0, 0, // 57 549 | 0, 0, 0, // 58 550 | 0, 0, 0, // 59 551 | // Frame: 9 552 | 0, 0, 0, // 0 553 | 0, 0, 0, // 1 554 | 0, 0, 0, // 2 555 | 47, 0, 255, // 3 556 | 0, 0, 0, // 4 557 | 0, 0, 0, // 5 558 | 0, 0, 0, // 6 559 | 0, 0, 0, // 7 560 | 0, 0, 0, // 8 561 | 0, 0, 0, // 9 562 | 255, 0, 35, // 10 563 | 0, 0, 0, // 11 564 | 0, 0, 0, // 12 565 | 0, 0, 0, // 13 566 | 0, 0, 0, // 14 567 | 0, 0, 0, // 15 568 | 47, 0, 255, // 16 569 | 0, 0, 0, // 17 570 | 0, 0, 0, // 18 571 | 0, 0, 0, // 19 572 | 0, 0, 0, // 20 573 | 0, 0, 0, // 21 574 | 0, 0, 0, // 22 575 | 255, 0, 35, // 23 576 | 0, 0, 0, // 24 577 | 0, 0, 0, // 25 578 | 0, 0, 0, // 26 579 | 0, 0, 0, // 27 580 | 0, 0, 0, // 28 581 | 47, 0, 255, // 29 582 | 0, 0, 0, // 30 583 | 0, 0, 0, // 31 584 | 0, 0, 0, // 32 585 | 0, 0, 0, // 33 586 | 0, 0, 0, // 34 587 | 255, 0, 35, // 35 588 | 0, 0, 0, // 36 589 | 0, 0, 0, // 37 590 | 0, 0, 0, // 38 591 | 0, 0, 0, // 39 592 | 0, 0, 0, // 40 593 | 0, 0, 0, // 41 594 | 47, 0, 255, // 42 595 | 0, 0, 0, // 43 596 | 0, 0, 0, // 44 597 | 0, 0, 0, // 45 598 | 0, 0, 0, // 46 599 | 0, 0, 0, // 47 600 | 255, 0, 35, // 48 601 | 0, 0, 0, // 49 602 | 0, 0, 0, // 50 603 | 0, 0, 0, // 51 604 | 0, 0, 0, // 52 605 | 0, 0, 0, // 53 606 | 0, 0, 0, // 54 607 | 47, 0, 255, // 55 608 | 0, 0, 0, // 56 609 | 0, 0, 0, // 57 610 | 0, 0, 0, // 58 611 | 0, 0, 0, // 59 612 | // Frame: 10 613 | 0, 0, 0, // 0 614 | 0, 0, 0, // 1 615 | 0, 0, 0, // 2 616 | 0, 0, 0, // 3 617 | 47, 0, 255, // 4 618 | 0, 0, 0, // 5 619 | 0, 0, 0, // 6 620 | 0, 0, 0, // 7 621 | 0, 0, 0, // 8 622 | 0, 0, 0, // 9 623 | 0, 0, 0, // 10 624 | 255, 0, 35, // 11 625 | 0, 0, 0, // 12 626 | 0, 0, 0, // 13 627 | 0, 0, 0, // 14 628 | 0, 0, 0, // 15 629 | 0, 0, 0, // 16 630 | 47, 0, 255, // 17 631 | 0, 0, 0, // 18 632 | 0, 0, 0, // 19 633 | 0, 0, 0, // 20 634 | 0, 0, 0, // 21 635 | 0, 0, 0, // 22 636 | 0, 0, 0, // 23 637 | 255, 0, 35, // 24 638 | 0, 0, 0, // 25 639 | 0, 0, 0, // 26 640 | 0, 0, 0, // 27 641 | 0, 0, 0, // 28 642 | 0, 0, 0, // 29 643 | 47, 0, 255, // 30 644 | 0, 0, 0, // 31 645 | 0, 0, 0, // 32 646 | 0, 0, 0, // 33 647 | 0, 0, 0, // 34 648 | 0, 0, 0, // 35 649 | 255, 0, 35, // 36 650 | 255, 0, 35, // 37 651 | 0, 0, 0, // 38 652 | 0, 0, 0, // 39 653 | 0, 0, 0, // 40 654 | 0, 0, 0, // 41 655 | 0, 0, 0, // 42 656 | 47, 0, 255, // 43 657 | 0, 0, 0, // 44 658 | 0, 0, 0, // 45 659 | 0, 0, 0, // 46 660 | 0, 0, 0, // 47 661 | 0, 0, 0, // 48 662 | 255, 0, 35, // 49 663 | 0, 0, 0, // 50 664 | 0, 0, 0, // 51 665 | 0, 0, 0, // 52 666 | 0, 0, 0, // 53 667 | 0, 0, 0, // 54 668 | 0, 0, 0, // 55 669 | 47, 0, 255, // 56 670 | 0, 0, 0, // 57 671 | 0, 0, 0, // 58 672 | 0, 0, 0, // 59 673 | // Frame: 11 674 | 0, 0, 0, // 0 675 | 0, 0, 0, // 1 676 | 0, 0, 0, // 2 677 | 0, 0, 0, // 3 678 | 0, 0, 0, // 4 679 | 47, 0, 255, // 5 680 | 0, 0, 0, // 6 681 | 0, 0, 0, // 7 682 | 0, 0, 0, // 8 683 | 0, 0, 0, // 9 684 | 0, 0, 0, // 10 685 | 0, 0, 0, // 11 686 | 255, 0, 35, // 12 687 | 0, 0, 0, // 13 688 | 0, 0, 0, // 14 689 | 0, 0, 0, // 15 690 | 0, 0, 0, // 16 691 | 0, 0, 0, // 17 692 | 47, 0, 255, // 18 693 | 0, 0, 0, // 19 694 | 0, 0, 0, // 20 695 | 0, 0, 0, // 21 696 | 0, 0, 0, // 22 697 | 0, 0, 0, // 23 698 | 0, 0, 0, // 24 699 | 255, 0, 35, // 25 700 | 0, 0, 0, // 26 701 | 0, 0, 0, // 27 702 | 0, 0, 0, // 28 703 | 0, 0, 0, // 29 704 | 0, 0, 0, // 30 705 | 47, 0, 255, // 31 706 | 0, 0, 0, // 32 707 | 0, 0, 0, // 33 708 | 0, 0, 0, // 34 709 | 0, 0, 0, // 35 710 | 0, 0, 0, // 36 711 | 0, 0, 0, // 37 712 | 255, 0, 35, // 38 713 | 0, 0, 0, // 39 714 | 0, 0, 0, // 40 715 | 0, 0, 0, // 41 716 | 0, 0, 0, // 42 717 | 0, 0, 0, // 43 718 | 47, 0, 255, // 44 719 | 0, 0, 0, // 45 720 | 0, 0, 0, // 46 721 | 0, 0, 0, // 47 722 | 0, 0, 0, // 48 723 | 0, 0, 0, // 49 724 | 255, 0, 35, // 50 725 | 0, 0, 0, // 51 726 | 0, 0, 0, // 52 727 | 0, 0, 0, // 53 728 | 0, 0, 0, // 54 729 | 0, 0, 0, // 55 730 | 0, 0, 0, // 56 731 | 47, 0, 255, // 57 732 | 0, 0, 0, // 58 733 | 0, 0, 0, // 59 734 | }; 735 | 736 | Animation animation(12, animationData, ENCODING_RGB24, 60); -------------------------------------------------------------------------------- /pixel.go: -------------------------------------------------------------------------------- 1 | /* 2 | The MIT License 3 | 4 | Copyright (c) 2016, William Poussier 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | */ 24 | 25 | package blinkygo 26 | 27 | import ( 28 | "errors" 29 | "fmt" 30 | "math" 31 | "strings" 32 | 33 | "golang.org/x/image/colornames" 34 | ) 35 | 36 | // HTML hecadecimal color-string formats. 37 | const ( 38 | HEX3DigitsForm = "%1x%1x%1x" 39 | HEX6DigitsForm = "%02x%02x%02x" 40 | ) 41 | 42 | // Exponents are the factors used to convert a color 43 | // from the screen space to the LED space. 44 | var ( 45 | RedExponent = 1.8 46 | GreenExponent = 1.8 47 | BlueExponent = 2.1 48 | ) 49 | 50 | // A Pixel represents a led of the strip. 51 | type Pixel struct { 52 | Color Color `json:"color"` 53 | } 54 | 55 | // A Color represents a color. 56 | type Color struct { 57 | R byte `json:"r"` 58 | G byte `json:"g"` 59 | B byte `json:"b"` 60 | } 61 | 62 | // NewRGBColor returns a new Color from its RGB representation. 63 | func NewRGBColor(r, g, b byte) Color { 64 | r, g, b = brightnessCorrect(r, g, b) 65 | return Color{R: r, G: g, B: b} 66 | } 67 | 68 | // brightnessCorrect performs a rough brightness correction 69 | // on a given RGB color triplet. 70 | func brightnessCorrect(r, g, b byte) (byte, byte, byte) { 71 | f := func(v byte, exp float64) byte { 72 | return byte(255 * math.Pow(float64(v)/255.0, exp)) 73 | } 74 | return f(r, RedExponent), f(g, GreenExponent), f(b, BlueExponent) 75 | } 76 | 77 | // NewNamedColor returns a new color from its name. 78 | // Supported names are from the package "colornames", 79 | // see https://godoc.org/golang.org/x/image/colornames 80 | func NewNamedColor(name string) (Color, error) { 81 | color, ok := colornames.Map[name] 82 | if !ok { 83 | return Color{}, ErrUnknownColorName 84 | } 85 | return NewRGBColor(color.R, color.G, color.B), nil 86 | } 87 | 88 | // NewHEXColor returns a new color parsed from its "html" hex color-string format, 89 | // either in the 3 "#F06" or 6 "#FF0066" digits form. First char '#' is optional. 90 | func NewHEXColor(color string) (Color, error) { 91 | var format string 92 | 93 | // remove "#" if it present at the beginning of the format 94 | color = strings.TrimPrefix(color, "#") 95 | 96 | if len(color) == 3 { 97 | format = HEX3DigitsForm 98 | } else if len(color) == 6 { 99 | format = HEX6DigitsForm 100 | } else { 101 | return Color{}, InvalidHEXColor{ 102 | color: color, 103 | err: errors.New("invalid format"), 104 | } 105 | } 106 | var r, g, b byte 107 | 108 | n, err := fmt.Sscanf(color, format, &r, &g, &b) 109 | if err != nil || n != 3 { 110 | return Color{}, InvalidHEXColor{ 111 | color: color, 112 | err: err, 113 | } 114 | } 115 | return NewRGBColor(r, g, b), nil 116 | } 117 | 118 | // clampedRGBTriplet returns the pixel data triplet in RGB format, 119 | // with its values clamped to 0-254 to avoid confusion with the LED 120 | // strip's control header (0xFF). 121 | func (p Pixel) clampedRGBTriplet() []byte { 122 | return []byte{ 123 | clamp(p.Color.R), 124 | clamp(p.Color.G), 125 | clamp(p.Color.B), 126 | } 127 | } 128 | 129 | func clamp(v byte) byte { 130 | return byte(math.Min(float64(ControlHeader-1), float64(v))) 131 | } 132 | --------------------------------------------------------------------------------