diff --git a/go-rpi-rgb-led-matrix/.travis.yml b/go-rpi-rgb-led-matrix/.travis.yml
new file mode 100644
index 0000000..378d24a
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/.travis.yml
@@ -0,0 +1,14 @@
+language: go
+
+go:
+ - 1.6
+ - 1.7
+ - tip
+
+before_install:
+ - cd $GOPATH/src/github.com/mcuadros/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/
+ - git submodule update --init
+ - make
+ - cd $GOPATH/src/github.com/mcuadros/go-rpi-rgb-led-matrix/
+ - go get -t -v ./...
+ - go install -v ./...
diff --git a/go-rpi-rgb-led-matrix/LICENSE b/go-rpi-rgb-led-matrix/LICENSE
new file mode 100644
index 0000000..81e256d
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Máximo Cuadros
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/go-rpi-rgb-led-matrix/README.md b/go-rpi-rgb-led-matrix/README.md
new file mode 100644
index 0000000..d387d73
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/README.md
@@ -0,0 +1,97 @@
+# go-rpi-rgb-led-matrix [](https://godoc.org/github.com/mcuadros/go-rpi-rgb-led-matrix) [](https://travis-ci.org/mcuadros/go-rpi-rgb-led-matrix)
+
+
+Go binding for [`rpi-rgb-led-matrix`](https://github.com/hzeller/rpi-rgb-led-matrix) an excellent C++ library to control [RGB LED displays](https://learn.adafruit.com/32x16-32x32-rgb-led-matrix/overview) with Raspberry Pi GPIO.
+
+This library includes the basic bindings to control de LED Matrix directly and also a convenient [ToolKit](https://godoc.org/github.com/mcuadros/go-rpi-rgb-led-matrix#ToolKit) with more high level functions. Also some [examples](https://github.com/mcuadros/go-rpi-rgb-led-matrix/tree/master/examples) are included to test the library and the configuration.
+
+The [`Canvas`](https://godoc.org/github.com/mcuadros/go-rpi-rgb-led-matrix#Canvas) struct implements the [`image.Image`](https://golang.org/pkg/image/#Image) interface from the Go standard library. This makes the interaction with the matrix simple as work with a normal image in Go, allowing the usage of any Go library build around the `image.Image` interface.
+
+To learn about the configuration and the wiring go to the [original library](https://github.com/hzeller/rpi-rgb-led-matrix), is highly detailed and well explained.
+
+Installation
+------------
+
+The recommended way to install `go-rpi-rgb-led-matrix` is:
+
+```sh
+go get github.com/mcuadros/go-rpi-rgb-led-matrix
+```
+
+Then you will get an **expected** error like this:
+
+```
+# github.com/mcuadros/go-rpi-rgb-led-matrix
+/usr/bin/ld: cannot find -lrgbmatrix
+collect2: error: ld returned 1 exit status
+```
+
+This happens because you need to compile the `rgbmatrix` C bindings:
+```sh
+cd $GOPATH/src/github.com/mcuadros/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/
+git submodule update --init
+make
+cd $GOPATH/src/github.com/mcuadros/go-rpi-rgb-led-matrix/
+go install -v ./...
+```
+
+Examples
+--------
+
+Setting all the pixels to white:
+
+```go
+// create a new Matrix instance with the DefaultConfig
+m, _ := rgbmatrix.NewRGBLedMatrix(&rgbmatrix.DefaultConfig)
+
+// create the Canvas, implements the image.Image interface
+c := rgbmatrix.NewCanvas(m)
+defer c.Close() // don't forgot close the Matrix, if not your leds will remain on
+
+// using the standard draw.Draw function we copy a white image onto the Canvas
+draw.Draw(c, c.Bounds(), &image.Uniform{color.White}, image.ZP, draw.Src)
+
+// don't forget call Render to display the new led status
+c.Render()
+```
+
+Playing a GIF into your matrix during 30 seconds:
+
+```go
+// create a new Matrix instance with the DefaultConfig
+m, _ := rgbmatrix.NewRGBLedMatrix(&rgbmatrix.DefaultConfig)
+
+// create a ToolKit instance
+tk := rgbmatrix.NewToolKit(m)
+defer tk.Close() // don't forgot close the Matrix, if not your leds will remain on
+
+// open the gif file for reading
+file, _ := os.Open("mario.gif")
+
+// play of the gif using the io.Reader
+close, _ := tk.PlayGIF(f)
+fatal(err)
+
+// we wait 30 seconds and then we stop the playing gif sending a True to the returned chan
+time.Sleep(time.Second * 30)
+close <- true
+```
+
+The image of the header was recorded using this few lines, the running _Mario_ gif, and three 32x64 pannels.
+
+
+Check the folder [`examples`](https://github.com/mcuadros/go-rpi-rgb-led-matrix/tree/master/examples) folder for more examples
+
+
+Matrix Emulation
+----------------
+
+As part of the library an small Matrix emulator is provided. The emulator renderize a virtual RGB matrix on a window in your desktop, without needing a real RGB matrix connected to your computer.
+
+To execute the emulator set the `MATRIX_EMULATOR` environment variable to `1`, then when `NewRGBLedMatrix` is used, a `emulator.Emulator` is returned instead of a interface the real board.
+
+
+License
+-------
+
+MIT, see [LICENSE](LICENSE)
diff --git a/go-rpi-rgb-led-matrix/canvas.go b/go-rpi-rgb-led-matrix/canvas.go
new file mode 100644
index 0000000..3b7d7f5
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/canvas.go
@@ -0,0 +1,77 @@
+package rgbmatrix
+
+import (
+ "image"
+ "image/color"
+ "image/draw"
+)
+
+// Canvas is a image.Image representation of a WS281x matrix, it implements
+// image.Image interface and can be used with draw.Draw for example
+type Canvas struct {
+ w, h int
+ m Matrix
+ closed bool
+}
+
+// NewCanvas returns a new Canvas using the given width and height and creates
+// a new WS281x matrix using the given config
+func NewCanvas(m Matrix) *Canvas {
+ w, h := m.Geometry()
+ return &Canvas{
+ w: w,
+ h: h,
+ m: m,
+ }
+}
+
+// Render update the display with the data from the LED buffer
+func (c *Canvas) Render() error {
+ return c.m.Render()
+}
+
+// ColorModel returns the canvas' color model, always color.RGBAModel
+func (c *Canvas) ColorModel() color.Model {
+ return color.RGBAModel
+}
+
+// Bounds return the topology of the Canvas
+func (c *Canvas) Bounds() image.Rectangle {
+ return image.Rect(0, 0, c.w, c.h)
+}
+
+// At returns the color of the pixel at (x, y)
+func (c *Canvas) At(x, y int) color.Color {
+ return c.m.At(c.position(x, y))
+}
+
+// Set set LED at position x,y to the provided 24-bit color value
+func (c *Canvas) Set(x, y int, color color.Color) {
+ c.m.Set(c.position(x, y), color)
+}
+
+func (c *Canvas) position(x, y int) int {
+ return x + (y * c.w)
+}
+
+// Clear set all the leds on the matrix with color.Black
+func (c *Canvas) Clear() error {
+ draw.Draw(c, c.Bounds(), &image.Uniform{color.Black}, image.ZP, draw.Src)
+ return c.m.Render()
+}
+
+// Close clears the matrix and close the matrix
+func (c *Canvas) Close() error {
+ c.Clear()
+ return c.m.Close()
+}
+
+// Matrix is an interface that represent any RGB matrix, very useful for testing
+type Matrix interface {
+ Geometry() (width, height int)
+ At(position int) color.Color
+ Set(position int, c color.Color)
+ Apply([]color.Color) error
+ Render() error
+ Close() error
+}
diff --git a/go-rpi-rgb-led-matrix/canvas_test.go b/go-rpi-rgb-led-matrix/canvas_test.go
new file mode 100644
index 0000000..3bb1972
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/canvas_test.go
@@ -0,0 +1,139 @@
+package rgbmatrix
+
+import (
+ "image/color"
+ "testing"
+
+ . "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) { TestingT(t) }
+
+type CanvasSuite struct{}
+
+var _ = Suite(&CanvasSuite{})
+
+func (s *CanvasSuite) TestNewCanvas(c *C) {
+ canvas := NewCanvas(NewMatrixMock())
+ c.Assert(canvas, NotNil)
+ c.Assert(canvas.w, Equals, 64)
+ c.Assert(canvas.h, Equals, 32)
+}
+
+func (s *CanvasSuite) TestRender(c *C) {
+ m := NewMatrixMock()
+ canvas := &Canvas{m: m}
+ canvas.Render()
+
+ c.Assert(m.called["Render"], Equals, true)
+}
+
+func (s *CanvasSuite) TestColorModel(c *C) {
+ canvas := &Canvas{}
+
+ c.Assert(canvas.ColorModel(), Equals, color.RGBAModel)
+}
+
+func (s *CanvasSuite) TestBounds(c *C) {
+
+ canvas := &Canvas{w: 10, h: 20}
+
+ b := canvas.Bounds()
+ c.Assert(b.Min.X, Equals, 0)
+ c.Assert(b.Min.Y, Equals, 0)
+ c.Assert(b.Max.X, Equals, 10)
+ c.Assert(b.Max.Y, Equals, 20)
+}
+
+func (s *CanvasSuite) TestAt(c *C) {
+ m := NewMatrixMock()
+ canvas := &Canvas{w: 10, h: 20, m: m}
+ canvas.At(5, 15)
+
+ c.Assert(m.called["At"], Equals, 155)
+}
+
+func (s *CanvasSuite) TestSet(c *C) {
+ m := NewMatrixMock()
+ canvas := &Canvas{w: 10, h: 20, m: m}
+ canvas.Set(5, 15, color.White)
+
+ c.Assert(m.called["Set"], Equals, 155)
+ c.Assert(m.colors[155], Equals, color.White)
+}
+
+func (s *CanvasSuite) TestClear(c *C) {
+ m := NewMatrixMock()
+
+ canvas := &Canvas{w: 10, h: 20, m: m}
+ err := canvas.Clear()
+ c.Assert(err, IsNil)
+
+ for _, px := range m.colors {
+ c.Assert(px, Equals, color.Black)
+ }
+
+ c.Assert(m.called["Render"], Equals, true)
+}
+
+func (s *CanvasSuite) TestClose(c *C) {
+ m := NewMatrixMock()
+ canvas := &Canvas{w: 10, h: 20, m: m}
+ err := canvas.Close()
+ c.Assert(err, IsNil)
+
+ for _, px := range m.colors {
+ c.Assert(px, Equals, color.Black)
+ }
+
+ c.Assert(m.called["Render"], Equals, true)
+}
+
+type MatrixMock struct {
+ called map[string]interface{}
+ colors []color.Color
+}
+
+func NewMatrixMock() *MatrixMock {
+ return &MatrixMock{
+ called: make(map[string]interface{}, 0),
+ colors: make([]color.Color, 200),
+ }
+}
+
+func (m *MatrixMock) Geometry() (width, height int) {
+ return 64, 32
+}
+
+func (m *MatrixMock) Initialize() error {
+ m.called["Initialize"] = true
+ return nil
+}
+
+func (m *MatrixMock) At(position int) color.Color {
+ m.called["At"] = position
+ return color.Black
+}
+
+func (m *MatrixMock) Set(position int, c color.Color) {
+ m.called["Set"] = position
+ m.colors[position] = c
+}
+
+func (m *MatrixMock) Apply(leds []color.Color) error {
+ for position, l := range leds {
+ m.Set(position, l)
+ }
+
+ return m.Render()
+}
+
+func (m *MatrixMock) Render() error {
+ m.called["Render"] = true
+ return nil
+}
+
+func (m *MatrixMock) Close() error {
+ m.called["Close"] = true
+ return nil
+}
diff --git a/go-rpi-rgb-led-matrix/emulator/emulator.go b/go-rpi-rgb-led-matrix/emulator/emulator.go
new file mode 100644
index 0000000..60ab8be
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/emulator/emulator.go
@@ -0,0 +1,204 @@
+package emulator
+
+import (
+ "fmt"
+ "image"
+ "image/color"
+ "os"
+ "sync"
+
+ "golang.org/x/exp/shiny/driver"
+ "golang.org/x/exp/shiny/screen"
+ "golang.org/x/mobile/event/paint"
+ "golang.org/x/mobile/event/size"
+)
+
+const DefaultPixelPitch = 12
+const windowTitle = "RGB led matrix emulator"
+
+type Emulator struct {
+ PixelPitch int
+ Gutter int
+ Width int
+ Height int
+ GutterColor color.Color
+ PixelPitchToGutterRatio int
+ Margin int
+
+ leds []color.Color
+ w screen.Window
+ s screen.Screen
+ wg sync.WaitGroup
+
+ isReady bool
+}
+
+func NewEmulator(w, h, pixelPitch int, autoInit bool) *Emulator {
+ e := &Emulator{
+ Width: w,
+ Height: h,
+ GutterColor: color.Gray{Y: 20},
+ PixelPitchToGutterRatio: 2,
+ Margin: 10,
+ }
+ e.updatePixelPitchForGutter(pixelPitch / e.PixelPitchToGutterRatio)
+
+ if autoInit {
+ e.Init()
+ }
+
+ return e
+}
+
+// Init initialize the emulator, creating a new Window and waiting until is
+// painted. If something goes wrong the function panics
+func (e *Emulator) Init() {
+ e.leds = make([]color.Color, e.Width*e.Height)
+
+ e.wg.Add(1)
+ go driver.Main(e.mainWindowLoop)
+ e.wg.Wait()
+}
+
+func (e *Emulator) mainWindowLoop(s screen.Screen) {
+ var err error
+ e.s = s
+ // Calculate initial window size based on whatever our gutter/pixel pitch currently is.
+ dims := e.matrixWithMarginsRect()
+ e.w, err = s.NewWindow(&screen.NewWindowOptions{
+ Title: windowTitle,
+ Width: dims.Max.X,
+ Height: dims.Max.Y,
+ })
+
+ if err != nil {
+ panic(err)
+ }
+
+ defer e.w.Release()
+
+ var sz size.Event
+ for {
+ evn := e.w.NextEvent()
+ switch evn := evn.(type) {
+ case paint.Event:
+ e.drawContext(sz)
+ if e.isReady {
+ continue
+ }
+
+ e.Apply(make([]color.Color, e.Width*e.Height))
+ e.wg.Done()
+ e.isReady = true
+ case size.Event:
+ sz = evn
+
+ case error:
+ fmt.Fprintln(os.Stderr, e)
+ }
+ }
+}
+
+func (e *Emulator) drawContext(sz size.Event) {
+ e.updatePixelPitchForGutter(e.calculateGutterForViewableArea(sz.Size()))
+ // Fill entire background with white.
+ e.w.Fill(sz.Bounds(), color.White, screen.Src)
+ // Fill matrix display rectangle with the gutter color.
+ e.w.Fill(e.matrixWithMarginsRect(), e.GutterColor, screen.Src)
+ // Set all LEDs to black.
+ e.Apply(make([]color.Color, e.Width*e.Height))
+}
+
+// Some formulas that allowed me to better understand the drawable area. I found that the math was
+// easiest when put in terms of the Gutter width, hence the addition of PixelPitchToGutterRatio.
+//
+// PixelPitch = PixelPitchToGutterRatio * Gutter
+// DisplayWidth = (PixelPitch * LEDColumns) + (Gutter * (LEDColumns - 1)) + (2 * Margin)
+// Gutter = (DisplayWidth - (2 * Margin)) / (PixelPitchToGutterRatio * LEDColumns + LEDColumns - 1)
+//
+// MMMMMMMMMMMMMMMM.....MMMM
+// MGGGGGGGGGGGGGGG.....GGGM
+// MGLGLGLGLGLGLGLG.....GLGM
+// MGGGGGGGGGGGGGGG.....GGGM
+// MGLGLGLGLGLGLGLG.....GLGM
+// MGGGGGGGGGGGGGGG.....GGGM
+// .........................
+// MGGGGGGGGGGGGGGG.....GGGM
+// MGLGLGLGLGLGLGLG.....GLGM
+// MGGGGGGGGGGGGGGG.....GGGM
+// MMMMMMMMMMMMMMMM.....MMMM
+//
+// where:
+// M = Margin
+// G = Gutter
+// L = LED
+
+// matrixWithMarginsRect Returns a Rectangle that describes entire emulated RGB Matrix, including margins.
+func (e *Emulator) matrixWithMarginsRect() image.Rectangle {
+ upperLeftLED := e.ledRect(0, 0)
+ lowerRightLED := e.ledRect(e.Width-1, e.Height-1)
+ return image.Rect(upperLeftLED.Min.X-e.Margin, upperLeftLED.Min.Y-e.Margin, lowerRightLED.Max.X+e.Margin, lowerRightLED.Max.Y+e.Margin)
+}
+
+// ledRect Returns a Rectangle for the LED at col and row.
+func (e *Emulator) ledRect(col int, row int) image.Rectangle {
+ x := (col * (e.PixelPitch + e.Gutter)) + e.Margin
+ y := (row * (e.PixelPitch + e.Gutter)) + e.Margin
+ return image.Rect(x, y, x+e.PixelPitch, y+e.PixelPitch)
+}
+
+// calculateGutterForViewableArea As the name states, calculates the size of the gutter for a given viewable area.
+// It's easier to understand the geometry of the matrix on screen when put in terms of the gutter,
+// hence the shift toward calculating the gutter size.
+func (e *Emulator) calculateGutterForViewableArea(size image.Point) int {
+ maxGutterInX := (size.X - 2*e.Margin) / (e.PixelPitchToGutterRatio*e.Width + e.Width - 1)
+ maxGutterInY := (size.Y - 2*e.Margin) / (e.PixelPitchToGutterRatio*e.Height + e.Height - 1)
+ if maxGutterInX < maxGutterInY {
+ return maxGutterInX
+ }
+ return maxGutterInY
+}
+
+func (e *Emulator) updatePixelPitchForGutter(gutterWidth int) {
+ e.PixelPitch = e.PixelPitchToGutterRatio * gutterWidth
+ e.Gutter = gutterWidth
+}
+
+func (e *Emulator) Geometry() (width, height int) {
+ return e.Width, e.Height
+}
+
+func (e *Emulator) Apply(leds []color.Color) error {
+ defer func() { e.leds = make([]color.Color, e.Height*e.Width) }()
+
+ var c color.Color
+ for col := 0; col < e.Width; col++ {
+ for row := 0; row < e.Height; row++ {
+ c = e.At(col + (row * e.Width))
+ e.w.Fill(e.ledRect(col, row), c, screen.Over)
+ }
+ }
+
+ e.w.Publish()
+ return nil
+}
+
+func (e *Emulator) Render() error {
+ return e.Apply(e.leds)
+}
+
+func (e *Emulator) At(position int) color.Color {
+ if e.leds[position] == nil {
+ return color.Black
+ }
+
+ return e.leds[position]
+}
+
+func (e *Emulator) Set(position int, c color.Color) {
+ e.leds[position] = color.RGBAModel.Convert(c)
+}
+
+func (e *Emulator) Close() error {
+ return nil
+}
diff --git a/go-rpi-rgb-led-matrix/examples/animation/main.go b/go-rpi-rgb-led-matrix/examples/animation/main.go
new file mode 100644
index 0000000..aa5a1b9
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/examples/animation/main.go
@@ -0,0 +1,98 @@
+package main
+
+import (
+ "flag"
+ "image"
+ "image/color"
+ "time"
+
+ "github.com/RockKeeper/go-rpi-rgb-led-matrix"
+ "github.com/fogleman/gg"
+)
+
+var (
+ rows = flag.Int("led-rows", 32, "number of rows supported")
+ cols = flag.Int("led-cols", 32, "number of columns supported")
+ parallel = flag.Int("led-parallel", 1, "number of daisy-chained panels")
+ chain = flag.Int("led-chain", 2, "number of displays daisy-chained")
+ brightness = flag.Int("brightness", 100, "brightness (0-100)")
+ hardware_mapping = flag.String("led-gpio-mapping", "regular", "Name of GPIO mapping used.")
+ show_refresh = flag.Bool("led-show-refresh", false, "Show refresh rate.")
+ inverse_colors = flag.Bool("led-inverse", false, "Switch if your matrix has inverse colors on.")
+ disable_hardware_pulsing = flag.Bool("led-no-hardware-pulse", false, "Don't use hardware pin-pulse generation.")
+)
+
+func main() {
+ config := &rgbmatrix.DefaultConfig
+ config.Rows = *rows
+ config.Cols = *cols
+ config.Parallel = *parallel
+ config.ChainLength = *chain
+ config.Brightness = *brightness
+ config.HardwareMapping = *hardware_mapping
+ config.ShowRefreshRate = *show_refresh
+ config.InverseColors = *inverse_colors
+ config.DisableHardwarePulsing = *disable_hardware_pulsing
+
+ m, err := rgbmatrix.NewRGBLedMatrix(config)
+ fatal(err)
+
+ tk := rgbmatrix.NewToolKit(m)
+ defer tk.Close()
+
+ tk.PlayAnimation(NewAnimation(image.Point{64, 32}))
+}
+
+func init() {
+ flag.Parse()
+}
+
+func fatal(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
+
+type Animation struct {
+ ctx *gg.Context
+ position image.Point
+ dir image.Point
+ stroke int
+}
+
+func NewAnimation(sz image.Point) *Animation {
+ return &Animation{
+ ctx: gg.NewContext(sz.X, sz.Y),
+ dir: image.Point{1, 1},
+ stroke: 5,
+ }
+}
+
+func (a *Animation) Next() (image.Image, <-chan time.Time, error) {
+ defer a.updatePosition()
+
+ a.ctx.SetColor(color.Black)
+ a.ctx.Clear()
+
+ a.ctx.DrawCircle(float64(a.position.X), float64(a.position.Y), float64(a.stroke))
+ a.ctx.SetColor(color.RGBA{255, 0, 0, 255})
+ a.ctx.Fill()
+ return a.ctx.Image(), time.After(time.Millisecond * 50), nil
+}
+
+func (a *Animation) updatePosition() {
+ a.position.X += 1 * a.dir.X
+ a.position.Y += 1 * a.dir.Y
+
+ if a.position.Y+a.stroke > a.ctx.Height() {
+ a.dir.Y = -1
+ } else if a.position.Y-a.stroke < 0 {
+ a.dir.Y = 1
+ }
+
+ if a.position.X+a.stroke > a.ctx.Width() {
+ a.dir.X = -1
+ } else if a.position.X-a.stroke < 0 {
+ a.dir.X = 1
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/examples/basic/main.go b/go-rpi-rgb-led-matrix/examples/basic/main.go
new file mode 100644
index 0000000..bdc01a8
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/examples/basic/main.go
@@ -0,0 +1,59 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "image/color"
+
+ "github.com/RockKeeper/go-rpi-rgb-led-matrix"
+)
+
+var (
+ rows = flag.Int("led-rows", 32, "number of rows supported")
+ cols = flag.Int("led-cols", 32, "number of columns supported")
+ parallel = flag.Int("led-parallel", 1, "number of daisy-chained panels")
+ chain = flag.Int("led-chain", 2, "number of displays daisy-chained")
+ brightness = flag.Int("brightness", 100, "brightness (0-100)")
+ hardware_mapping = flag.String("led-gpio-mapping", "regular", "Name of GPIO mapping used.")
+ show_refresh = flag.Bool("led-show-refresh", false, "Show refresh rate.")
+ inverse_colors = flag.Bool("led-inverse", false, "Switch if your matrix has inverse colors on.")
+ disable_hardware_pulsing = flag.Bool("led-no-hardware-pulse", false, "Don't use hardware pin-pulse generation.")
+)
+
+func main() {
+ config := &rgbmatrix.DefaultConfig
+ config.Rows = *rows
+ config.Cols = *cols
+ config.Parallel = *parallel
+ config.ChainLength = *chain
+ config.Brightness = *brightness
+ config.HardwareMapping = *hardware_mapping
+ config.ShowRefreshRate = *show_refresh
+ config.InverseColors = *inverse_colors
+ config.DisableHardwarePulsing = *disable_hardware_pulsing
+
+ m, err := rgbmatrix.NewRGBLedMatrix(config)
+ fatal(err)
+
+ c := rgbmatrix.NewCanvas(m)
+ defer c.Close()
+
+ bounds := c.Bounds()
+ for x := bounds.Min.X; x < bounds.Max.X; x++ {
+ for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
+ fmt.Println("x", x, "y", y)
+ c.Set(x, y, color.RGBA{255, 0, 0, 255})
+ c.Render()
+ }
+ }
+}
+
+func init() {
+ flag.Parse()
+}
+
+func fatal(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/examples/image/main.go b/go-rpi-rgb-led-matrix/examples/image/main.go
new file mode 100644
index 0000000..6f73631
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/examples/image/main.go
@@ -0,0 +1,72 @@
+package main
+
+import (
+ "flag"
+ "os"
+ "time"
+
+ "github.com/RockKeeper/go-rpi-rgb-led-matrix"
+ "github.com/disintegration/imaging"
+)
+
+var (
+ rows = flag.Int("led-rows", 32, "number of rows supported")
+ cols = flag.Int("led-cols", 32, "number of columns supported")
+ parallel = flag.Int("led-parallel", 1, "number of daisy-chained panels")
+ chain = flag.Int("led-chain", 2, "number of displays daisy-chained")
+ brightness = flag.Int("brightness", 100, "brightness (0-100)")
+ hardware_mapping = flag.String("led-gpio-mapping", "regular", "Name of GPIO mapping used.")
+ show_refresh = flag.Bool("led-show-refresh", false, "Show refresh rate.")
+ inverse_colors = flag.Bool("led-inverse", false, "Switch if your matrix has inverse colors on.")
+ disable_hardware_pulsing = flag.Bool("led-no-hardware-pulse", false, "Don't use hardware pin-pulse generation.")
+ img = flag.String("image", "", "image path")
+
+ rotate = flag.Int("rotate", 0, "rotate angle, 90, 180, 270")
+)
+
+func main() {
+ f, err := os.Open(*img)
+ fatal(err)
+
+ config := &rgbmatrix.DefaultConfig
+ config.Rows = *rows
+ config.Cols = *cols
+ config.Parallel = *parallel
+ config.ChainLength = *chain
+ config.Brightness = *brightness
+ config.HardwareMapping = *hardware_mapping
+ config.ShowRefreshRate = *show_refresh
+ config.InverseColors = *inverse_colors
+ config.DisableHardwarePulsing = *disable_hardware_pulsing
+
+ m, err := rgbmatrix.NewRGBLedMatrix(config)
+ fatal(err)
+
+ tk := rgbmatrix.NewToolKit(m)
+ defer tk.Close()
+
+ switch *rotate {
+ case 90:
+ tk.Transform = imaging.Rotate90
+ case 180:
+ tk.Transform = imaging.Rotate180
+ case 270:
+ tk.Transform = imaging.Rotate270
+ }
+
+ close, err := tk.PlayGIF(f)
+ fatal(err)
+
+ time.Sleep(time.Second * 30)
+ close <- true
+}
+
+func init() {
+ flag.Parse()
+}
+
+func fatal(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/examples/rpc/client/main.go b/go-rpi-rgb-led-matrix/examples/rpc/client/main.go
new file mode 100644
index 0000000..bcfe434
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/examples/rpc/client/main.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+ "flag"
+ "os"
+ "time"
+
+ "github.com/RockKeeper/go-rpi-rgb-led-matrix"
+ "github.com/RockKeeper/go-rpi-rgb-led-matrix/rpc"
+)
+
+var (
+ img = flag.String("image", "", "image path")
+)
+
+func main() {
+ f, err := os.Open(*img)
+ fatal(err)
+
+ m, err := rpc.NewClient("tcp", "10.20.20.20:1234")
+ fatal(err)
+
+ tk := rgbmatrix.NewToolKit(m)
+ close, err := tk.PlayGIF(f)
+ fatal(err)
+
+ time.Sleep(time.Second * 3)
+ close <- true
+}
+
+func init() {
+ flag.Parse()
+}
+
+func fatal(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/examples/rpc/server/main.go b/go-rpi-rgb-led-matrix/examples/rpc/server/main.go
new file mode 100644
index 0000000..338d036
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/examples/rpc/server/main.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+ "flag"
+
+ "github.com/RockKeeper/go-rpi-rgb-led-matrix"
+ "github.com/RockKeeper/go-rpi-rgb-led-matrix/rpc"
+)
+
+var (
+ rows = flag.Int("led-rows", 32, "number of rows supported")
+ cols = flag.Int("led-cols", 32, "number of columns supported")
+ parallel = flag.Int("led-parallel", 1, "number of daisy-chained panels")
+ chain = flag.Int("led-chain", 2, "number of displays daisy-chained")
+ brightness = flag.Int("brightness", 100, "brightness (0-100)")
+ hardware_mapping = flag.String("led-gpio-mapping", "regular", "Name of GPIO mapping used.")
+ show_refresh = flag.Bool("led-show-refresh", false, "Show refresh rate.")
+ inverse_colors = flag.Bool("led-inverse", false, "Switch if your matrix has inverse colors on.")
+ disable_hardware_pulsing = flag.Bool("led-no-hardware-pulse", false, "Don't use hardware pin-pulse generation.")
+)
+
+func main() {
+ config := &rgbmatrix.DefaultConfig
+ config.Rows = *rows
+ config.Cols = *cols
+ config.Parallel = *parallel
+ config.ChainLength = *chain
+ config.Brightness = *brightness
+ config.HardwareMapping = *hardware_mapping
+ config.ShowRefreshRate = *show_refresh
+ config.InverseColors = *inverse_colors
+ config.DisableHardwarePulsing = *disable_hardware_pulsing
+
+ m, err := rgbmatrix.NewRGBLedMatrix(config)
+ fatal(err)
+
+ rpc.Serve(m)
+}
+
+func fatal(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/.editorconfig b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/.editorconfig
new file mode 100644
index 0000000..3f512fc
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/.editorconfig
@@ -0,0 +1,15 @@
+# Editor config file, see http://editorconfig.org/
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{h,cc}]
+indent_size = 2
+
+[Makefile]
+indent_style = tab
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/.github/workflows/c-cpp.yml b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/.github/workflows/c-cpp.yml
new file mode 100644
index 0000000..23aa0bf
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/.github/workflows/c-cpp.yml
@@ -0,0 +1,17 @@
+name: C/C++ CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: make
+ run: make
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/COPYING b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/COPYING
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/Makefile
new file mode 100644
index 0000000..96da79c
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/Makefile
@@ -0,0 +1,34 @@
+# This toplevel Makefile compiles the library in the lib subdirectory.
+# If you want to see how to integrate the library in your own projects, check
+# out the sub-directories examples-api-use/ and utils/
+RGB_LIBDIR=./lib
+RGB_LIBRARY_NAME=rgbmatrix
+RGB_LIBRARY=$(RGB_LIBDIR)/lib$(RGB_LIBRARY_NAME).a
+
+# Some language bindings.
+PYTHON_LIB_DIR=bindings/python
+CSHARP_LIB_DIR=bindings/c\#
+
+all : $(RGB_LIBRARY)
+
+$(RGB_LIBRARY): FORCE
+ $(MAKE) -C $(RGB_LIBDIR)
+ $(MAKE) -C examples-api-use
+
+clean:
+ $(MAKE) -C lib clean
+ $(MAKE) -C utils clean
+ $(MAKE) -C examples-api-use clean
+ $(MAKE) -C $(PYTHON_LIB_DIR) clean
+
+build-csharp:
+ $(MAKE) -C $(CSHARP_LIB_DIR) build
+
+build-python: $(RGB_LIBRARY)
+ $(MAKE) -C $(PYTHON_LIB_DIR) build
+
+install-python: build-python
+ $(MAKE) -C $(PYTHON_LIB_DIR) install
+
+FORCE:
+.PHONY: FORCE
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/README.md
new file mode 100644
index 0000000..c7b330d
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/README.md
@@ -0,0 +1,795 @@
+Controlling RGB LED display with Raspberry Pi GPIO
+==================================================
+
+A library to control commonly available 64x64, 32x32 or 16x32 RGB LED panels
+with the Raspberry Pi. Can support PWM up to 11Bit per channel, providing
+true 24bpp color with CIE1931 profile.
+
+Supports 3 chains with many panels each on a regular Pi.
+On a Raspberry Pi 2 or 3, you can easily chain 12 panels in that chain
+(so 36 panels total), but you can theoretically stretch that to up
+to 96-ish panels (32 chain length) and still reach
+around 100Hz refresh rate with full 24Bit color (theoretical - never tested
+this; there might likely be timing problems with the panels that will creep
+up then).
+
+With fewer colors or so-called 'outdoor panels' you can control even more,
+faster.
+
+The LED-matrix library is (c) Henner Zeller , licensed with
+[GNU General Public License Version 2.0](http://www.gnu.org/licenses/gpl-2.0.txt)
+(which means, if you use it in a product somewhere, you need to make the
+source and all your modifications available to the receiver of such product so
+that they have the freedom to adapt and improve).
+
+## Discourse discussion group
+
+If you'd like help, please do not file a bug, use the discussion board instead:
+https://rpi-rgb-led-matrix.discourse.group/
+
+Overview
+--------
+The RGB LED matrix panels can be scored at [Sparkfun][sparkfun],
+[AdaFruit][ada] or eBay and Aliexpress. If you are in China, I'd try to get
+them directly from some manufacturer, Taobao or Alibaba.
+
+The `RGBMatrix` class provided in `include/led-matrix.h` does what is needed
+to control these. You can use this as a library in your own projects or just
+use the demo binary provided here which provides some useful examples.
+
+Check out [utils/ directory for some ready-made tools](./utils) to get started
+using the library, or the [examples-api-use/](./examples-api-use) directory if
+you want to get started programming your own utils.
+
+All Raspberry Pi versions supported
+-----------------------------------
+
+This supports the old Raspberry Pi's Version 1 with 26 pin header and also the
+B+ models, the Pi Zero, Raspberry Pi 2 and 3 with 40 pins, as well as the
+Compute Modules which have 44 GPIOs.
+The 26 pin models can drive one chain of RGB panels, the 40 pin models
+**up to three** chains in parallel (each chain 12 or more panels long).
+The Compute Module can drive **up to 6 chains in parallel**.
+The Raspberry Pi 2 and 3 are faster and generally perferred to the older
+models (and the Pi Zero). With the faster models, the panels sometimes
+can't keep up with the speed; check out
+this [troubleshooting section](#troubleshooting) what to do.
+
+A lightweight, non-GUI, distribution such as [DietPi] is recommended.
+[Raspbian Lite][raspbian-lite] is a bit easier to get started with and
+is a good second choice.
+
+Types of Displays
+-----------------
+There are various types of displays that come all with the same Hub75 connector.
+They vary in the way the multiplexing is happening so this library supports
+options to choose that.
+All these are configured by flags (or, programmatically, in an [Options struct](include/led-matrix.h#L57)).
+
+If you have a 64x32 display, you need to supply the flags
+`--led-cols=64 --led-rows=32` for instance.
+
+Depending on the Matrix, there are various configuration options that
+you might need to set for it to work. See further below in the README for the
+[detailed description of these](#changing-parameters-via-command-line-flags).
+While the `--led-rows` and `--led-cols` can be derived from simply looking
+at the panels, the other options might require some experimenting to find the
+right setting if there is no description provided by the manufacturer of
+the panel. Going through these options for experiments would typically not do
+harm, so you're free to experiment to find your setting.
+
+Flag | Description
+:--------------- | :-----------------
+`--led-cols` | Columns in the LED matrix, the 'width'.
+`--led-rows` | Rows in the LED matrix, the 'height'.
+`--led-multiplexing` | In particular bright outdoor panels with small multiplex ratios require this. Often an indicator: if there are fewer address lines than expected: ABC (instead of ABCD) for 32 high panels and ABCD (instead of ABCDE) for 64 high panels.
+`--led-row-addr-type` | Adressing of rows; in particular panels with only AB address lines might indicate that this is needed.
+`--led-panel-type` | Chipset of the panel. In particular if it doesn't light up at all, you might need to play with this option because it indicates that the panel requires a particular initialization sequence.
+
+Panels can be chained by connecting the output of one panel to the input of
+the next panel. You can chain quite a few together, but the refresh rate will
+reduce with longer chains.
+
+The 64x64 matrixes typically come in two kinds: with 5 address
+lines (A, B, C, D, E), or (A, B); the latter needs a `--led-row-addr-type=1`
+parameter. So-called 'outdoor panels' are typically brighter and allow for
+faster refresh-rate for the same size, but do some multiplexing internally
+of which there are a few types out there; they can be chosen with
+the `--led-multiplexing` parameter.
+
+There are some panels that have a different chip-set than the default HUB75.
+These require some initialization sequence. The current supported types are
+`--led-panel-type=FM6126A` and `--led-panel-type=FM6127`.
+
+Generally, the higher scan-rate (e.g. 1:8), a.k.a. outdoor panels generally
+allow faster refresh rate, but you might need to figure out the multiplexing
+mapping if one of the three provided does not work.
+
+Some 32x16 outdoor matrixes with 1:4 scan (e.g. [Qiangli Q10(1/4) or X10(1/4)](http://qiangliled.com/products-63.html))
+have 4 address line (A, B, C, D). For such matrices is necessary to
+use `--led-row-addr-type=2` parameter. Also the matrix Qiangli Q10(1/4)
+have "Z"-stripe pixel mapping and in this case, you'd use two parameters
+at the same time `--led-row-addr-type=2 --led-multiplexing=4`.
+
+Let's do it
+------------
+This documentation is split into parts that help you through the process
+
+ 1.
+ [**Wire up the matrix to your Pi**](./wiring.md). This document describes
+ what goes where. You might also be interested
+ in [breakout boards](./adapter) for that.
+ If you have an [Adafruit HAT] or [Adafruit Bonnet], you can choose that with
+ a command line option [described below](#if-you-have-an-adafruit-hat-or-bonnet)
+ 2. Run a demo. You find that in the
+ [examples-api-use/](./examples-api-use#running-some-demos) directory:
+```
+make -C examples-api-use
+sudo examples-api-use/demo -D0
+```
+ 3. Use the utilities. The [utils](./utils) directory has some ready-made
+ useful utilities to show content. [Go there](./utils) to see how to
+ compile and run these.
+ 4. Write your own programs using the Matrix in C++ or one of the
+ bindings such as Python or C#.
+
+### Utilities
+
+The [utils directory](./utils) is meant for ready utilities to show images or
+animated gifs or videos. Read the [README](./utils/README.md) there for
+instructions how to compile.
+
+There are external projects that use this library and provide higher level
+network protocols, such as the
+ * [FlaschenTaschen implementation](https://github.com/hzeller/flaschen-taschen)
+ (VLC can send videos to it natively)
+ * [PixelPusher implementation](https://github.com/hzeller/rpi-matrix-pixelpusher) (common in light art installations)
+ * [ZeroMQ-server](https://github.com/Knifa/led-matrix-zmq-server) to receive
+ content.
+ * Marc's [FastLED_RPIRGBPanel_GFX](http://marc.merlins.org/perso/arduino/post_2020-01-01_Running-FastLED_-Adafruit_GFX_-and-LEDMatrix-code-on-High-Resolution-RGBPanels-with-a-Raspberry-Pi.html) allows running arduino code on linux/rPi and display on bigger RGBPanel matrices than arduino chips, can.
+
+### API
+
+The library comes as an API that you can use for your own utilities and use-cases.
+
+ * The native library is a C++ library (see [include/](./include)).
+ Example uses you find in the [examples-api-use/](./examples-api-use)
+ directory.
+ * If you prefer to program in C, there is also a
+ [C API](./include/led-matrix-c.h).
+ * In the [python](./bindings/python) subdirectory, you find a Python API including a
+ couple of [examples](./bindings/python/samples) to get started.
+ * There are a couple of external bindings, such as
+ * [Nodejs binding] by Maxime Journaux
+ * [Nodejs/Typescript binding] by Alex Eden
+ * [Go binding] by Máximo Cuadros
+ * [Rust binding] by Vincent Pasquier
+
+### Changing parameters via command-line flags
+
+For the programs in this distribution and also automatically in your own
+programs using this library, there are a lot of parameters provided as command
+line flags, so that you don't have to re-compile your programs to tweak them.
+Some might need to be changed for your particular kind of panel.
+
+Here is a little run-down of what these command-line flags do and when you'd
+like to change them.
+
+First things first: if you have a different wiring than described in
+[wiring](./wiring.md), for instance if you have an Adafruit HAT/Bonnet, you can
+choose these here:
+
+```
+--led-gpio-mapping=: Name of GPIO mapping used. Default "regular"
+```
+
+This can have values such as
+ - `--led-gpio-mapping=regular` The standard mapping of this library, described in the [wiring](./wiring.md) page.
+ - `--led-gpio-mapping=adafruit-hat` The Adafruit HAT/Bonnet, that uses this library or
+ - `--led-gpio-mapping=adafruit-hat-pwm` Adafruit HAT with the anti-flicker hardware mod [described below](#improving-flicker).
+ - `--led-gpio-mapping=compute-module` Additional 3 parallel chains can be used with the Compute Module.
+
+Learn more about the mappings in the [wiring documentation](wiring.md#alternative-hardware-mappings).
+
+#### GPIO speed
+
+```
+--led-slowdown-gpio=<0..4>: Slowdown GPIO. Needed for faster Pis and/or slower panels (Default: 1).
+```
+
+The Raspberry Pi starting with Pi2 are putting out data too fast for almost
+all LED panels I have seen. In this case, you want to slow down writing to
+GPIO. Zero for this parameter means 'no slowdown'.
+
+The default 1 (one) typically works fine, but often you have to even go further
+by setting it to 2 (two). If you have a Raspberry Pi with a slower processor
+(Model A, A+, B+, Zero), then a value of 0 (zero) might work and is desirable.
+
+A Raspberry Pi 3 or Pi4 might even need higher values for the panels to be
+happy.
+
+#### Panel Connection
+The next most important flags describe the type and number of displays connected
+
+```
+--led-rows= : Panel rows. Typically 8, 16, 32 or 64. (Default: 32).
+--led-cols= : Panel columns. Typically 32 or 64. (Default: 32).
+--led-chain= : Number of daisy-chained panels. (Default: 1).
+--led-parallel=: For A/B+ models or RPi2,3b: parallel chains. range=1..3 (Default: 1, 6 for Compute Module).
+```
+
+These are the most important ones: here you choose how many panels you have
+connected and how many rows are in each panel. Panels can be chained (each panel
+has an input and output connector, see the
+[wiring documentation](wiring.md#chains)) -- the `--led-chain` flag tells the
+library how many panels are chained together. The newer Raspberry Pi's allow
+to connect multiple chains in parallel, the `--led-parallel` flag tells it how
+many there are.
+
+This illustrates what each of these parameters mean:
+
+
+
+##### Panel Type
+
+Typically, panels should just work out of the box, but some panels use a
+different chip-set that requires some initialization. If you don't see any
+output on your panel, try setting:
+
+```
+--led-panel-type=FM6126A
+```
+
+Some panels have the FM6127 chip, which is also an option.
+
+##### Multiplexing
+If you have some 'outdoor' panels or panels with different multiplexing,
+the following will be useful:
+
+```
+--led-multiplexing=<0..17> : Mux type: 0=direct; 1=Stripe; 2=Checkered...
+```
+
+The outdoor panels have different multiplexing which allows them to be faster
+and brighter, but by default their output looks jumbled up.
+They require some pixel-mapping of which there are a few
+types you can try and hopefully one of them works for your panel; The default=0
+is no mapping ('standard' panels), while 1, 2, ... are different mappings
+to try with. If your panel has a different mapping, you find everything you
+need to implement one in [lib/multiplex-mappers.cc](lib/multiplex-mappers.cc).
+Please send a pull request if you encounter a panel for which you needed to
+implement a new mapping.
+
+Note that you have to set the `--led-rows` and `--led-cols` to the rows and
+columns that are physically on each chained panel so that the multiplexing
+option can work properly. For instance a `32x16` panel with `1:4` multiplexing
+would be controlled with `--led-rows=16 --led-cols=32 --led-multiplexing=1` (or
+whatever multiplexing type your panel is, so it can also be `--led-multiplexing=2` ...).
+
+For `64x32` panels with `1:8` multiplexing, this would typically be
+`--led-rows=32 --led-cols=64 --led-multiplexing=1`;
+however, there are some panels that internally behave like
+two chained panels, so then you'd use
+`--led-rows=32 --led-cols=32 --led-chain=2 --led-multiplexing=1`;
+
+```
+--led-row-addr-type=<0..4>: 0 = default; 1 = AB-addressed panels; 2 = direct row select; 3 = ABC-addressed panels; 4 = ABC Shift + DE direct (Default: 0).
+```
+
+This option is useful for certain 64x64 or 32x16 panels. For 64x64 panels,
+that only have an `A` and `B` address line, you'd use `--led-row-addr-type=1`.
+This is only tested with one panel so far, so if it doesn't work for you,
+please send a pull request.
+
+For 32x16 outdoor panels, that have have 4 address line (A, B, C, D), it is
+necessary to use `--led-row-addr-type=2`.
+
+#### Panel Arrangement
+
+```
+--led-pixel-mapper : Semicolon-separated list of pixel-mappers to arrange pixels.
+```
+
+Optional params after a colon e.g. "U-mapper;Rotate:90"
+
+Available | Parameter after colon| Example
+----------|----------------------|----------
+Mirror | `H` or `V` for horizontal/vertical mirror. | `Mirror:H`
+Rotate | Degrees. | `Rotate:90`
+U-mapper | -
+
+Mapping the logical layout of your boards to your physical arrangement. See
+more in [Remapping coordinates](./examples-api-use#remapping-coordinates).
+
+#### Misc Options
+
+```
+--led-brightness=: Brightness in percent (Default: 100).
+```
+
+Self explanatory.
+
+
+```
+--led-pwm-bits=<1..11> : PWM bits (Default: 11).
+```
+
+The LEDs can only be switched on or off, so the shaded brightness perception
+is achieved via PWM (Pulse Width Modulation). In order to get a good 8 Bit
+per color resolution (24Bit RGB), the 11 bits default per color are good
+(why ? Because our eyes are actually perceiving brightness logarithmically, so
+we need a lot more physical resolution to get 24Bit sRGB).
+
+With this flag, you can change how many bits it should use for this; lowering it
+means the lower bits (=more subtle color nuances) are omitted.
+Typically you might be mostly interested in the extremes: 1 Bit for situations
+that only require 8 colors (e.g. for high contrast text displays) or 11 Bit
+for everything else (e.g. showing images or videos). Why would you bother at all ?
+Lower number of bits use slightly less CPU and result in a higher refresh rate.
+
+```
+--led-show-refresh : Show refresh rate.
+```
+
+This shows the current refresh rate of the LED panel, the time to refresh
+a full picture. Typically, you want this number to be pretty high, because the
+human eye is pretty sensitive to flicker. Depending on the settings, the
+refresh rate with this library are typically in the hundreds of Hertz but
+can drop low with very long chains. Humans have different levels of perceiving
+flicker - some are fine with 100Hz refresh, others need 250Hz.
+So if you are curious, this gives you the number (shown on the terminal).
+
+The refresh rate depends on a lot of factors, from `--led-rows` and `--led-chain`
+to `--led-pwm-bits`, `--led-pwm-lsb-nanoseconds` and `--led-pwm-dither-bits`.
+If you are tweaking these parameters, showing the refresh rate can be a
+useful tool.
+
+```
+--led-limit-refresh= : Limit refresh rate to this frequency in Hz. Useful to keep a
+ constant refresh rate on loaded system. 0=no limit. Default: 0
+```
+
+This allows to limit the refresh rate to a particular frequency to approach
+a fixed refresh rate.
+
+This can be used to mitigate some situations in which you have a faint flicker,
+which can happen due to hardware events (network access)
+or other situations such as other IO or heavy memory access by other
+processes. Also when you see wildly changing refresh frequencies with
+`--led-show-refresh`.
+
+You trade a slightly slower refresh rate and display brightness for less
+visible flicker situations.
+
+For this to calibrate, run your program for a while with --led-show-refresh
+and watch the line that shows the current refresh rate and minimum refresh
+rate observed. So wait a while until that value doesn't
+change anymore (e.g. a minute, so that you catch tasks that happen once
+a minute, such as ntp updated).
+Use this as a guidance what value to choose with `--led-limit-refresh`.
+
+The refresh rate will now be adapted to always reach this value
+between frames, so faster refreshes will be slowed down, but the occasional
+delayed frame will fit into the time-window as well, thus reducing visible
+brightness fluctuations.
+
+You can play with value a little and reduce until you find a good balance
+between refresh rate and flicker suppression.
+
+Use this also if you want to have a stable baseline refresh rate when using
+the vsync-multiple flag `-V` in the [led-image-viewer] or
+[video-viewer] utility programs.
+
+```
+--led-scan-mode=<0..1> : 0 = progressive; 1 = interlaced (Default: 0).
+```
+
+This switches from progressive scan and interlaced scan. The latter might
+look be a little nicer when you have a very low refresh rate, but typically
+it is more annoying because of the comb-effect (remember 80ies TV ?).
+
+
+```
+--led-pwm-lsb-nanoseconds : PWM Nanoseconds for LSB (Default: 130)
+```
+
+This allows to change the base time-unit for the on-time in the lowest
+significant bit in nanoseconds.
+Lower values will allow higher frame-rate, but will also negatively impact
+qualty in some panels (less accurate color or more ghosting).
+
+Good values for full-color display (PWM=11) are somewhere between 100 and 300.
+
+If you you use reduced bit color (e.g. PWM=1) and have sharp contrast
+applications, then higher values might be good to minimize ghosting.
+
+How to decide ? Just leave the default if things are fine. But some panels have
+trouble with sharp contrasts and short pulses that results
+in ghosting. It is particularly apparent in situations such as bright text
+on black background. In these cases increase the value until you don't see
+this ghosting anymore.
+
+The following example shows how this might look like:
+
+Ghosting with low --led-pwm-lsb-nanoseconds | No ghosting after tweaking
+---------------------------------------------|------------------------------
+ |
+
+If you tweak this value, watch the framerate (`--led-show-refresh`) while playing
+with this number.
+
+```
+--led-pwm-dither-bits : Time dithering of lower bits (Default: 0)
+```
+
+The lower bits can be time dithered, i.e. their brightness contribution is
+achieved by only showing them some frames (this is possible,
+because the PWM is implemented as binary code modulation).
+This will allow higher refresh rate (or same refresh rate with increased
+`--led-pwm-lsb-nanoseconds`).
+The disadvantage could be slightly lower brightness, in particular for longer
+chains, and higher CPU use.
+CPU use is not of concern for Rasbperry Pi 2 or 3 (as we run on a dedicated
+core anyway) but proably for Raspberry Pi 1 or Pi Zero.
+Default: no dithering; if you have a Pi 3 and struggle with low frame-rate due
+to high multiplexing panels (1:16 or 1:32) or long chains, it might be
+worthwhile to try.
+
+```
+--led-no-hardware-pulse : Don't use hardware pin-pulse generation.
+```
+
+This library uses a hardware subsystem that also is used by the sound. You can't
+use them together. If your panel does not work, this might be a good start
+to debug if it has something to do with the sound subsystem (see Troubleshooting
+section). This is really only recommended for debugging; typically you actually
+want the hardware pulses as it results in a much more stable picture.
+
+
+
+```
+--led-no-drop-privs : Don't drop privileges from 'root' after initializing the hardware.
+```
+
+You need to start programs as root as it needs to access some low-level hardware
+at initialization time. After that, it is typically not desirable to stay in this
+role, so the library then drops the privileges.
+
+This flag allows to switch off this behavior, so that you stay root.
+Not recommended unless you have a specific reason for it (e.g. you need root
+to access other hardware or you do the privilege dropping yourself).
+
+```
+--led-daemon : Make the process run in the background as daemon.
+```
+
+If this is set, the program puts itself into the background (running
+as 'daemon').
+You might want this if started from an init script at boot-time.
+
+```
+--led-inverse : Switch if your matrix has inverse colors on.
+--led-rgb-sequence : Switch if your matrix has led colors swapped (Default: "RGB")
+```
+
+These are if you have a different kind of LED panel in which the logic of the
+color bits is reversed (`--led-inverse`) or where the Red, Green and Blue LEDs
+are mixed up (`--led-rgb-sequence`). You know it when you see it.
+
+Troubleshooting
+---------------
+Here are some tips in case things don't work as expected.
+
+### Use minimal Raspbian distribution
+In general, run a minimal configuration on your Pi.
+
+ * Do not use a graphical user interface (Even though the
+ Raspberry Pi foundation makes you believe that you can do that: don't.
+ Using a Pi with a GUI is a frustratingly slow use of an otherwise
+ perfectly good embedded device.)
+
+ * Switch off on-board sound (`dtparam=audio=off` in `/boot/config.txt`).
+ External USB sound adapters work, and are much better quality anyway,
+ so that is recommended if you happen to need sound. The on-board sound
+ uses a timing circuit that the RGB-Matrix needs (it seems in some
+ distributions, such as arch-linux, this is not enough and you need
+ to explicitly blacklist the snd_bcm2835 module).
+
+ * Don't run anything that messes in parallel with the GPIO pins, e.g.
+ PiGPIO library/daemon or devices that use the i2c or 1-wire interface if
+ they are on the same pins you need for the panel.
+
+ * I have also seen reports that on some Pis, the one-wire protocol is
+ enabled (w1-gpio). This will also not work (disable by removing
+ `dtoverlay=w1-gpio` in `/boot/config.txt`; or using `raspi-config`,
+ Interface Options -> 1-Wire)
+
+ * If you see some regular flickering, make sure that there is no other
+ process running on the system that could cause that. For instance, it is
+ known that merely running `top` creates a faint flicker every second it
+ updates. Or a regular ntp run can also cause flicker once a minute
+ (switch off with `sudo timedatectl set-ntp false`). Maybe instead you
+ might want to run ntp at system start-up but then not regularly updating.
+ There might be other things running regularly you don't need;
+ consider a `sudo systemctl stop cron` for instance.
+ To address some irregular flicker, consider the
+ [`--led-limit-refresh`](#misc-options) option.
+
+ * There are probably other processes that are running that you don't need
+ and remove them; I usually remove right away stuff I really don't need e.g.
+ ```
+ sudo apt-get remove bluez bluez-firmware pi-bluetooth triggerhappy pigpio
+ ```
+ Take a close look at your systemd (`systemctl`) and see if there are other
+ things running you don't need. If you have seen packages in standard
+ Raspbians that interfere with the matrix code, let me know to include it
+ here.
+ In general: This is why starting with a minimal installation is a good
+ idea: there is simply less cruft that you have to disable.
+
+ * It seems that more recent version of Raspbian Lite result in some faint
+ brightness fluctuations of the displays and it is not quite clear why (see
+ issue [#483](https://github.com/hzeller/rpi-rgb-led-matrix/issues/483)).
+ If you are a Kernel person and can help figuring out what is
+ happening that would be very appreciated. Also, you might know a minimal
+ Linux distribution that is more suited for near realtime applications ?
+
+The default install of **[Raspbian Lite][raspbian-lite]** or **[DietPi]**
+seem to be good starting points, as they have a reasonably minimal
+configuration to begin with. Raspbian Lite is not as lite anymore
+as it used to be; I prefer DietPi these days.
+
+### Bad interaction with Sound
+If sound is enabled on your Pi, this will not work together with the LED matrix,
+as both need the same internal hardware sub-system (a first test to see if you
+are affected is to run the progrem with `--led-no-hardware-pulse` and see if
+things work fine then).
+
+If you run `lsmod` and see the `snd_bcm2835` module, this could be causing trouble.
+(The library actually exits if it finds this module to be loaded).
+
+In that case, you should create a kernel module blacklist file like the
+following on your system and update your initramfs:
+
+```
+cat <
+
+Then, start your programs with `--led-gpio-mapping=adafruit-hat-pwm`.
+
+Now you should have less visible flicker. This essentially
+switches on the hardware pulses feature for the Adafruit HAT/Bonnet.
+
+### 64x64 with E-line on Adafruit HAT/Bonnet
+There are LED panels that have 64x64 LEDs packed, but they need 5 address lines,
+which is 1:32 multiplexing (they have an `E` address-line). The hardware of
+the Adafruit HAT/Bonnet is not prepared for this, but it can be done with another
+hardware mod.
+
+It is a little more advanced hack, so is only really for people who are
+comfortable with this kind of thing.
+First, you have to figure out which is the input of the E-Line on your matrix
+(they seem to be either on Pin 4 or Pin 8 of the IDC connector).
+You need to disconnect that Pin from the ground plane (e.g. with an Exacto
+knife) and connect GPIO 24 to it. The following images illustrate the case for
+IDC Pin 4.
+
+
+
+
+If the direct connection does not work, you need to send it through a free
+level converter of the Adafruit HAT/Bonnet. Since all unused inputs are grounded
+with traces under the chip, this involves lifting a leg from the
+HCT245 (figure out a free bus driver from the schematic). If all of the
+above makes sense to you, you have the Ninja level to do it!
+
+It might be more convienent at this point to consider the [Active3 adapter](./adapter/active-3)
+that has that covered already.
+
+Running as root
+---------------
+The library requires to access hardware registers to control the LED matrix,
+and create accurate timings. These hardware accesses require to run as root
+user.
+
+For security reasons, it is usually not a good idea to run an application
+as root entirely, so this library makes sure to drop privileges immediately
+after the hardware is initialized.
+
+You can switch off the privilege dropping with the
+[`--led-no-drop-privs`](#user-content-no-drop-priv) flag, or, if you do this
+programmatically,
+choose the configuration in the
+[`RuntimeOptions struct`](https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/include/led-matrix.h#L401).
+
+Note, you _could_ run as non-root, which will use `/dev/gpiomem`
+to at least write to GPIO, however the precise timing hardware registers are
+not accessible. This will result in flicker and color degradation. Starting
+as non-root is not recommended.
+
+CPU use
+-------
+
+These displays need to be updated constantly to show an image with PWMed
+LEDs. This is dependent on the length of the chain: for each chain element,
+about 1'000'000 write operations have to happen every second!
+(chain_length * 32 pixel long * 16 rows * 11 bit planes * 180 Hz refresh rate).
+
+We can't use hardware support for writing these as DMA is too slow,
+thus the constant CPU use on an RPi is roughly 30-40% of one core.
+Keep that in mind if you plan to run other things on this computer (This
+is less noticable on Raspberry Pi, Version 2 or 3 that has more cores).
+
+Also, the output quality is susceptible to other heavy tasks running on that
+computer - there might be changes in the overall brigthness when this affects
+the referesh rate.
+
+If you have a loaded system and one of the newer Pis with 4 cores, you can
+reserve one core just for the refresh of the display:
+
+```
+isolcpus=3
+```
+
+.. at the end of the line of `/boot/cmdline.txt` (needs to be in the same as
+the other arguments, no newline). This will use the last core
+only to refresh the display then, but it also means, that no other process can
+utilize it then. Still, I'd typically recommend it.
+
+Performance improvements and limits
+-----------------------------------
+Regardless of which driving hardware you use, ultimately you can only push pixels
+so fast to a string of panels before you get flickering due to too low a refresh
+rate (less than 80-100Hz), or before you refresh the panel lines too fast and they
+appear too dim because each line is not displayed long enough before it is turned off.
+
+Basic performance tips:
+- Use --led-show-refresh to see the refresh rate while you try parameters
+- use an active-3 board with led-parallel=3
+- led-pwm-dither-bits=1 gives you a speed boost but less brightness
+- led-pwm-lsb-nanoseconds=50 also gives you a speed boost but less brightness
+- led-pwm-bits=7 or even lower decrease color depth but increases refresh speed
+- AB panels and other panels with that use values of led-multiplexing bigger than 0,
+will also go faster, although as you tune more options given above, their advantage will decrease.
+- 32x16 ABC panels are faster than ABCD which are faster than ABCDE, which are faster than 128x64 ABC panels
+(which do use 5 address lines, but over only 3 wires)
+- Use at least an rPi3 (rPi4 is still slightly faster but may need --led-slowdown-gpio=2)
+
+Maximum resolutions reasonably achievable:
+A general rule of thumb is that running 16K pixels (128x128 or otherwise) on a single chain,
+is already pushing limits and you will have to make tradeoffs in visual quality. 32K pixels
+(like 128x256) is definitely pushing things and you'll get 100Hz or less depending on the
+performance options you choose.
+This puts the maximum reasonable resolution around 100K pixels (like 384x256) for 3 chains.
+You can see more examples and video capture of speed on [Marc MERLIN's page 'RGB Panels, from 192x80, to 384x192, to 384x256 and maybe not much beyond'](http://marc.merlins.org/perso/arduino/post_2020-03-13_RGB-Panels_-from-192x80_-to-384x192_-to-384x256-and-maybe-not-much-beyond.html)
+If your refresh rate is below 300Hz, expect likely black bars when taking cell phone pictures.
+A real camera with shutter speed lowered accordingly, will get around this.
+
+Ultimately, you should not expect to go past 64K pixels using 3 chains without significant
+quality tradeoffs. If you need bigger displays, you should use multiple boards and synchronize the
+output.
+
+Limitations
+-----------
+If you are using the Adafruit HAT/Bonnet in the default configuration, then we
+can't make use of the PWM hardware (which only outputs
+to a particular pin), so you'll see random brightness glitches. I strongly
+suggest to do the aforementioned hardware mod.
+
+The system needs constant CPU to update the display. Using the DMA controller
+was considered but after extensive experiments
+( https://github.com/hzeller/rpi-gpio-dma-demo )
+dropped due to its slow speed..
+
+There is an upper limit in how fast the GPIO pins can be controlled, which
+limits the frame-rate. Raspberry Pi 2's and newer are generally faster.
+
+Even with everything in place, you might see faint brightness fluctuations
+in particular if there is something going on on the network or in a terminal
+on the Pi; this could probably be mitigated with some more real-time
+kernel for the Pi; maybe there are also hardware limitations (memory bus
+contention?). Anyway, if you have a realtime kernel configuration that you
+have optimized for this application, let me know.
+
+To address the brightness fluctuations, you might experiment with the
+`FIXED_FRAME_MICROSECONDS` compile time option in [lib/Makefile](lib/Makefile)
+that has instructions how to set it up.
+
+Fun
+---
+I am always happy to see users successfully using the software for wonderful
+things, like this installation by Dirk in Scharbeutz, Germany:
+
+
+
+[led-image-viewer]: ./utils#image-viewer
+[video-viewer]: ./utils#video-viewer
+[matrix64]: ./img/chained-64x64.jpg
+[sparkfun]: https://www.sparkfun.com/products/12584
+[ada]: http://www.adafruit.com/product/1484
+[rt-paper]: https://www.osadl.org/fileadmin/dam/rtlws/12/Brown.pdf
+[adafruit-hat]: https://www.adafruit.com/products/2345
+[raspbian-lite]: https://downloads.raspberrypi.org/raspbian_lite_latest
+[DietPi]: https://dietpi.com/
+[Adafruit HAT]: https://www.adafruit.com/products/2345
+[Adafruit Bonnet]: https://www.adafruit.com/product/3211
+[Nodejs binding]: https://github.com/zeitungen/node-rpi-rgb-led-matrix
+[Go binding]: https://github.com/mcuadros/go-rpi-rgb-led-matrix
+[Rust binding]: https://crates.io/crates/rpi-led-matrix
+[Nodejs/Typescript binding]: https://github.com/alexeden/rpi-led-matrix
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/README.md
new file mode 100644
index 0000000..207c9db
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/README.md
@@ -0,0 +1,23 @@
+PCB adapter for Raspberry Pi to Hub75 RGB Matrixes
+==================================================
+
+Since hand-wiring can be a little tedious, here are some PCBs that help
+with the wiring when using the `rpi-rgb-led-matrix` code.
+
+ * [Passive-3](./passive-3) Supports three parallel chains, directly connected
+ to the output of a Rapsberry Pi with 40 GPIO pins. Works, but usually it is better to
+ buffer the outputs using the ...
+ * [Active-3](./active-3) board. Supports three parallel chains with active buffering
+ and 3.3V -> 5V level shifting for best reliability. Requires SMD soldering.
+
+ As another option you can buy it from these locations not affiliated with this project.
+ They are given to help you locate premade boards but no guarantees are given or implied:
+ * https://www.electrodragon.com/product/rgb-matrix-panel-drive-board-raspberry-pi/
+ ($3/board, but fairly long and/or expensive shipping from HKG)
+ * Seller #2 (fill me)
+ * The [Passive-RPi1](./passive-rpi1) adapter board is to connect one panel to
+ Raspberry Pi 1 with 26 GPIO pins.
+
+![Three Panels connected][three-panels]
+
+[three-panels]: ../img/three-parallel-panels-soic.jpg
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/Makefile
new file mode 100644
index 0000000..31b36d1
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/Makefile
@@ -0,0 +1,3 @@
+include ../kicad-scripts/makefile.inc
+
+active3-rpi-hub75-adapter-fab.zip:
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/README.md
new file mode 100644
index 0000000..75345e7
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/README.md
@@ -0,0 +1,84 @@
+Adapter PCB to support up to 3 panel chains
+===========================================
+
+ * Supports up to three panel chains for newer plus models and
+ Raspberry Pi 2 that have 40 GPIO pins.
+ * Uses HCT245 to level shift signals from 3.3V to 5V and shield
+ the Raspberry Pi GPIOs from overloading.
+ * Open source KiCAD PCB EDA format.
+ * Optional: Pads to power the Pi with 5V, including optional capacitor footprints.
+ * Connector for RxD input (literally the only GPIO pin left) in case you want to
+ make your panel controlled with a serial interface (3.3V logic level).
+ * Provides a way to choose the pinout for different kinds of 64x64 matrixes.
+ * (not very pretty layout, was just lazy and let the auto-router generate the first pass)
+ * BOM:
+ - 4x 74HCT245 or 74AHCT245 in 20-SOIC, 7.5mm package which should make
+ it easy to hand-solder. Make sure to get the variant with the **T**: HC**T** or AHC**T**
+ (there are also HC or AHC, don't use these).
+ - 4x 100nF ceramic capacitor (0805 package)
+ - 1x 10kOhm resistor (0805 package). Not critcial, just a pullup (2.2k .. 15k probably ok).
+ - 3x 16pin IDC (=2x8) male receptible to connect the panels.
+ - 1x 40pin female connector to connect to the RPi.
+ - 1x (optional) 22μF .. 100μF capacitor for 5V rail (either 1206 SMD or
+ radial electrolytic with 2.5mm pitch/6.3mm diameter)
+ * The Gerber FAB files are provided as [active3-rpi-hub75-adapter-fab.zip](./active3-rpi-hub75-adapter-fab.zip)
+
+The board is also [shared on OSH Park][osh-active3] (not affiliated).
+
+![Preview][rendering]
+![Real World][real-world]
+
+Essentially, this is connecting the output pins through level shifting buffers (they
+are operated at 5V, but the HCT series chips accept 3.3V input levels from the Pi). The
+strobe, OE and clock signals are separately buffered for each connector.
+
+![Schematic][schematic]
+
+## Optional
+
+### Power in
+
+The area on the left has 5V/GND input pads, that allow you to power your Raspberry Pi from
+a 5V source ... which you are likely to have as you are powering the LED Matrix. This is often
+more convenient than using the USB connector to power the Pi.
+
+If you do that, there are pads to add a capacitor to smooth the supply - two footprints are
+provided: C5 and C6 for through-hole or surface mount components. The value is not critical;
+I usually use a 22μF/6.3V ceramic capacitor on the C6 pads.
+
+### Choose E-Line for 64x64 panels with 1:32 multiplexing
+
+If you have a 64x64 matrix with 1:32 multiplexing, you need to supply an `E`-address line to it.
+While the Address lines `A` to `D` have fixed positions on the Hub75 connector, there
+seem to be two different ways to connect the `E` address line: it is either on pin 4 or pin 8
+of the connector. So this adapter board provides the flexibility to choose the right pin for
+your matrix.
+
+Look at the back of the matrix or the documentation to find out for your specific board where
+to connect E.
+
+Once you know that, the jumper area in the bottom left of this adapter board allows to choose
+to which pin to connect the E-address line to. The corresponding other pin should be connected
+to GND. Simply solder a wire bridge as indicated below (or use a jumper that you can change later).
+
+If you are not using such 64x64 matrix, you can connect both these pins to GND.
+
+Here are the typical configurations:
+
+No 1:32 64x64: to GND | E-Line on Pin 4 | E-Line on Pin 8|
+-------------------------|-------------------|----------------
+![][config-default] |![][config-pin4] |![][config-pin8]
+
+### Input for serial RxD
+
+If you are not using a 64x64 display that occupies the E-Line, you can use the RxD serial input -
+this might come in handy if you are using the display to be controlled by a serial line. Be aware
+that the input requires 3.3V level, so if you have a RS232, make sure to first adapt the levels.
+
+[rendering]: ../../img/active3-pcb.png
+[config-default]: ../../img/active3-pcb-config-default.png
+[config-pin4]: ../../img/active3-pcb-config-pin4.png
+[config-pin8]: ../../img/active3-pcb-config-pin8.png
+[schematic]: ../../img/active3-schematic.png
+[real-world]: ../../img/three-parallel-panels-soic.jpg
+[osh-active3]: https://oshpark.com/shared_projects/6xAD1VXr
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter-cache.lib b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter-cache.lib
new file mode 100644
index 0000000..f29be2a
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter-cache.lib
@@ -0,0 +1,352 @@
+EESchema-LIBRARY Version 2.4
+#encoding utf-8
+#
+# 74xx_74HC245
+#
+DEF 74xx_74HC245 U 0 40 Y Y 1 L N
+F0 "U" -300 650 50 H V C CNN
+F1 "74xx_74HC245" -300 -650 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+ALIAS 74HC245
+$FPLIST
+ DIP?20*
+$ENDFPLIST
+DRAW
+S -300 600 300 -600 1 1 10 f
+P 3 1 0 0 -25 -50 -25 50 25 50 N
+P 4 1 0 0 -50 -50 25 -50 25 50 50 50 N
+X A->B 1 -500 -400 200 R 50 50 1 0 I
+X GND 10 0 -800 200 U 50 50 1 0 W
+X B7 11 500 -200 200 L 50 50 1 0 T
+X B6 12 500 -100 200 L 50 50 1 0 T
+X B5 13 500 0 200 L 50 50 1 0 T
+X B4 14 500 100 200 L 50 50 1 0 T
+X B3 15 500 200 200 L 50 50 1 0 T
+X B2 16 500 300 200 L 50 50 1 0 T
+X B1 17 500 400 200 L 50 50 1 0 T
+X B0 18 500 500 200 L 50 50 1 0 T
+X CE 19 -500 -500 200 R 50 50 1 0 I I
+X A0 2 -500 500 200 R 50 50 1 0 T
+X VCC 20 0 800 200 D 50 50 1 0 W
+X A1 3 -500 400 200 R 50 50 1 0 T
+X A2 4 -500 300 200 R 50 50 1 0 T
+X A3 5 -500 200 200 R 50 50 1 0 T
+X A4 6 -500 100 200 R 50 50 1 0 T
+X A5 7 -500 0 200 R 50 50 1 0 T
+X A6 8 -500 -100 200 R 50 50 1 0 T
+X A7 9 -500 -200 200 R 50 50 1 0 T
+ENDDRAW
+ENDDEF
+#
+# Connector_Generic_Conn_01x01
+#
+DEF Connector_Generic_Conn_01x01 J 0 40 Y N 1 F N
+F0 "J" 0 100 50 H V C CNN
+F1 "Connector_Generic_Conn_01x01" 0 -100 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ Connector*:*
+$ENDFPLIST
+DRAW
+S -50 5 0 -5 1 1 6 N
+S -50 50 50 -50 1 1 10 f
+X Pin_1 1 -200 0 150 R 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Connector_Generic_Conn_01x02
+#
+DEF Connector_Generic_Conn_01x02 J 0 40 Y N 1 F N
+F0 "J" 0 100 50 H V C CNN
+F1 "Connector_Generic_Conn_01x02" 0 -200 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ Connector*:*_1x??_*
+$ENDFPLIST
+DRAW
+S -50 -95 0 -105 1 1 6 N
+S -50 5 0 -5 1 1 6 N
+S -50 50 50 -150 1 1 10 f
+X Pin_1 1 -200 0 150 R 50 50 1 1 P
+X Pin_2 2 -200 -100 150 R 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Connector_Generic_Conn_02x01
+#
+DEF Connector_Generic_Conn_02x01 J 0 40 Y N 1 F N
+F0 "J" 50 100 50 H V C CNN
+F1 "Connector_Generic_Conn_02x01" 50 -100 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ Connector*:*_2x??_*
+$ENDFPLIST
+DRAW
+S -50 5 0 -5 1 1 6 N
+S -50 50 150 -50 1 1 10 f
+S 150 5 100 -5 1 1 6 N
+X Pin_1 1 -200 0 150 R 50 50 1 1 P
+X Pin_2 2 300 0 150 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Connector_Generic_Conn_02x08_Odd_Even
+#
+DEF Connector_Generic_Conn_02x08_Odd_Even J 0 40 Y N 1 F N
+F0 "J" 50 400 50 H V C CNN
+F1 "Connector_Generic_Conn_02x08_Odd_Even" 50 -500 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ Connector*:*_2x??_*
+$ENDFPLIST
+DRAW
+S -50 -395 0 -405 1 1 6 N
+S -50 -295 0 -305 1 1 6 N
+S -50 -195 0 -205 1 1 6 N
+S -50 -95 0 -105 1 1 6 N
+S -50 5 0 -5 1 1 6 N
+S -50 105 0 95 1 1 6 N
+S -50 205 0 195 1 1 6 N
+S -50 305 0 295 1 1 6 N
+S -50 350 150 -450 1 1 10 f
+S 150 -395 100 -405 1 1 6 N
+S 150 -295 100 -305 1 1 6 N
+S 150 -195 100 -205 1 1 6 N
+S 150 -95 100 -105 1 1 6 N
+S 150 5 100 -5 1 1 6 N
+S 150 105 100 95 1 1 6 N
+S 150 205 100 195 1 1 6 N
+S 150 305 100 295 1 1 6 N
+X Pin_1 1 -200 300 150 R 50 50 1 1 P
+X Pin_10 10 300 -100 150 L 50 50 1 1 P
+X Pin_11 11 -200 -200 150 R 50 50 1 1 P
+X Pin_12 12 300 -200 150 L 50 50 1 1 P
+X Pin_13 13 -200 -300 150 R 50 50 1 1 P
+X Pin_14 14 300 -300 150 L 50 50 1 1 P
+X Pin_15 15 -200 -400 150 R 50 50 1 1 P
+X Pin_16 16 300 -400 150 L 50 50 1 1 P
+X Pin_2 2 300 300 150 L 50 50 1 1 P
+X Pin_3 3 -200 200 150 R 50 50 1 1 P
+X Pin_4 4 300 200 150 L 50 50 1 1 P
+X Pin_5 5 -200 100 150 R 50 50 1 1 P
+X Pin_6 6 300 100 150 L 50 50 1 1 P
+X Pin_7 7 -200 0 150 R 50 50 1 1 P
+X Pin_8 8 300 0 150 L 50 50 1 1 P
+X Pin_9 9 -200 -100 150 R 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Connector_Generic_Conn_02x20_Odd_Even
+#
+DEF Connector_Generic_Conn_02x20_Odd_Even J 0 40 Y N 1 F N
+F0 "J" 50 1000 50 H V C CNN
+F1 "Connector_Generic_Conn_02x20_Odd_Even" 50 -1100 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ Connector*:*_2x??_*
+$ENDFPLIST
+DRAW
+S -50 -995 0 -1005 1 1 6 N
+S -50 -895 0 -905 1 1 6 N
+S -50 -795 0 -805 1 1 6 N
+S -50 -695 0 -705 1 1 6 N
+S -50 -595 0 -605 1 1 6 N
+S -50 -495 0 -505 1 1 6 N
+S -50 -395 0 -405 1 1 6 N
+S -50 -295 0 -305 1 1 6 N
+S -50 -195 0 -205 1 1 6 N
+S -50 -95 0 -105 1 1 6 N
+S -50 5 0 -5 1 1 6 N
+S -50 105 0 95 1 1 6 N
+S -50 205 0 195 1 1 6 N
+S -50 305 0 295 1 1 6 N
+S -50 405 0 395 1 1 6 N
+S -50 505 0 495 1 1 6 N
+S -50 605 0 595 1 1 6 N
+S -50 705 0 695 1 1 6 N
+S -50 805 0 795 1 1 6 N
+S -50 905 0 895 1 1 6 N
+S -50 950 150 -1050 1 1 10 f
+S 150 -995 100 -1005 1 1 6 N
+S 150 -895 100 -905 1 1 6 N
+S 150 -795 100 -805 1 1 6 N
+S 150 -695 100 -705 1 1 6 N
+S 150 -595 100 -605 1 1 6 N
+S 150 -495 100 -505 1 1 6 N
+S 150 -395 100 -405 1 1 6 N
+S 150 -295 100 -305 1 1 6 N
+S 150 -195 100 -205 1 1 6 N
+S 150 -95 100 -105 1 1 6 N
+S 150 5 100 -5 1 1 6 N
+S 150 105 100 95 1 1 6 N
+S 150 205 100 195 1 1 6 N
+S 150 305 100 295 1 1 6 N
+S 150 405 100 395 1 1 6 N
+S 150 505 100 495 1 1 6 N
+S 150 605 100 595 1 1 6 N
+S 150 705 100 695 1 1 6 N
+S 150 805 100 795 1 1 6 N
+S 150 905 100 895 1 1 6 N
+X Pin_1 1 -200 900 150 R 50 50 1 1 P
+X Pin_10 10 300 500 150 L 50 50 1 1 P
+X Pin_11 11 -200 400 150 R 50 50 1 1 P
+X Pin_12 12 300 400 150 L 50 50 1 1 P
+X Pin_13 13 -200 300 150 R 50 50 1 1 P
+X Pin_14 14 300 300 150 L 50 50 1 1 P
+X Pin_15 15 -200 200 150 R 50 50 1 1 P
+X Pin_16 16 300 200 150 L 50 50 1 1 P
+X Pin_17 17 -200 100 150 R 50 50 1 1 P
+X Pin_18 18 300 100 150 L 50 50 1 1 P
+X Pin_19 19 -200 0 150 R 50 50 1 1 P
+X Pin_2 2 300 900 150 L 50 50 1 1 P
+X Pin_20 20 300 0 150 L 50 50 1 1 P
+X Pin_21 21 -200 -100 150 R 50 50 1 1 P
+X Pin_22 22 300 -100 150 L 50 50 1 1 P
+X Pin_23 23 -200 -200 150 R 50 50 1 1 P
+X Pin_24 24 300 -200 150 L 50 50 1 1 P
+X Pin_25 25 -200 -300 150 R 50 50 1 1 P
+X Pin_26 26 300 -300 150 L 50 50 1 1 P
+X Pin_27 27 -200 -400 150 R 50 50 1 1 P
+X Pin_28 28 300 -400 150 L 50 50 1 1 P
+X Pin_29 29 -200 -500 150 R 50 50 1 1 P
+X Pin_3 3 -200 800 150 R 50 50 1 1 P
+X Pin_30 30 300 -500 150 L 50 50 1 1 P
+X Pin_31 31 -200 -600 150 R 50 50 1 1 P
+X Pin_32 32 300 -600 150 L 50 50 1 1 P
+X Pin_33 33 -200 -700 150 R 50 50 1 1 P
+X Pin_34 34 300 -700 150 L 50 50 1 1 P
+X Pin_35 35 -200 -800 150 R 50 50 1 1 P
+X Pin_36 36 300 -800 150 L 50 50 1 1 P
+X Pin_37 37 -200 -900 150 R 50 50 1 1 P
+X Pin_38 38 300 -900 150 L 50 50 1 1 P
+X Pin_39 39 -200 -1000 150 R 50 50 1 1 P
+X Pin_4 4 300 800 150 L 50 50 1 1 P
+X Pin_40 40 300 -1000 150 L 50 50 1 1 P
+X Pin_5 5 -200 700 150 R 50 50 1 1 P
+X Pin_6 6 300 700 150 L 50 50 1 1 P
+X Pin_7 7 -200 600 150 R 50 50 1 1 P
+X Pin_8 8 300 600 150 L 50 50 1 1 P
+X Pin_9 9 -200 500 150 R 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Device_C
+#
+DEF Device_C C 0 10 N Y 1 F N
+F0 "C" 25 100 50 H V L CNN
+F1 "Device_C" 25 -100 50 H V L CNN
+F2 "" 38 -150 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ C_*
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 150 110 D 50 50 1 1 P
+X ~ 2 0 -150 110 U 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Device_CP_Small
+#
+DEF Device_CP_Small C 0 10 N N 1 F N
+F0 "C" 10 70 50 H V L CNN
+F1 "Device_CP_Small" 10 -80 50 H V L CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ CP_*
+$ENDFPLIST
+DRAW
+S -60 -12 60 -27 0 1 0 F
+S -60 27 60 12 0 1 0 N
+P 2 0 1 0 -50 60 -30 60 N
+P 2 0 1 0 -40 50 -40 70 N
+X ~ 1 0 100 73 D 50 50 1 1 P
+X ~ 2 0 -100 73 U 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Device_C_Small
+#
+DEF Device_C_Small C 0 10 N N 1 F N
+F0 "C" 10 70 50 H V L CNN
+F1 "Device_C_Small" 10 -80 50 H V L CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ C_*
+$ENDFPLIST
+DRAW
+P 2 0 1 13 -60 -20 60 -20 N
+P 2 0 1 12 -60 20 60 20 N
+X ~ 1 0 100 80 D 50 50 1 1 P
+X ~ 2 0 -100 80 U 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# Device_R
+#
+DEF Device_R R 0 0 N Y 1 F N
+F0 "R" 80 0 50 V V C CNN
+F1 "Device_R" 0 0 50 V V C CNN
+F2 "" -70 0 50 V I C CNN
+F3 "" 0 0 50 H I C CNN
+$FPLIST
+ R_*
+$ENDFPLIST
+DRAW
+S -40 -100 40 100 0 1 10 N
+X ~ 1 0 150 50 D 50 50 1 1 P
+X ~ 2 0 -150 50 U 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# power_GND
+#
+DEF power_GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -250 50 H I C CNN
+F1 "power_GND" 0 -150 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# power_PWR_FLAG
+#
+DEF power_PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 75 50 H I C CNN
+F1 "power_PWR_FLAG" 0 150 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N
+X pwr 1 0 0 0 U 50 50 0 0 w
+ENDDRAW
+ENDDEF
+#
+# power_VCC
+#
+DEF power_VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "power_VCC" 0 150 50 H V C CNN
+F2 "" 0 0 50 H I C CNN
+F3 "" 0 0 50 H I C CNN
+DRAW
+C 0 75 25 0 1 0 N
+P 2 0 1 0 0 0 0 50 N
+X VCC 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter-fab.zip b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter-fab.zip
new file mode 100644
index 0000000..19a5327
Binary files /dev/null and b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter-fab.zip differ
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.kicad_pcb b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.kicad_pcb
new file mode 100644
index 0000000..f95ff5d
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.kicad_pcb
@@ -0,0 +1,3368 @@
+(kicad_pcb (version 20171130) (host pcbnew "(5.1.2-13-gd94b8b9c0-dirty)")
+
+ (general
+ (thickness 1.6)
+ (drawings 35)
+ (tracks 833)
+ (zones 0)
+ (modules 27)
+ (nets 69)
+ )
+
+ (page A4)
+ (layers
+ (0 F.Cu signal)
+ (31 B.Cu signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ (46 B.CrtYd user)
+ (47 F.CrtYd user)
+ (48 B.Fab user)
+ (49 F.Fab user)
+ )
+
+ (setup
+ (last_trace_width 0.254)
+ (user_trace_width 0.254)
+ (user_trace_width 0.3048)
+ (user_trace_width 0.4064)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (edge_width 0.1)
+ (segment_width 0.2)
+ (pcb_text_width 0.3)
+ (pcb_text_size 1.5 1.5)
+ (mod_edge_width 0.15)
+ (mod_text_size 1 1)
+ (mod_text_width 0.15)
+ (pad_size 1.8 1.8)
+ (pad_drill 0.9)
+ (pad_to_mask_clearance 0)
+ (aux_axis_origin 0 0)
+ (visible_elements 7FFFFF7F)
+ (pcbplotparams
+ (layerselection 0x010e0_80000001)
+ (usegerberextensions true)
+ (usegerberattributes false)
+ (usegerberadvancedattributes false)
+ (creategerberjobfile false)
+ (excludeedgelayer true)
+ (linewidth 0.100000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15.000000)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory "fab/"))
+ )
+
+ (net 0 "")
+ (net 1 VCC)
+ (net 2 GND)
+ (net 3 p2_g1)
+ (net 4 p2_b1)
+ (net 5 strobe)
+ (net 6 p2_r1)
+ (net 7 p2_r2)
+ (net 8 p0_r1)
+ (net 9 p0_g1)
+ (net 10 OE)
+ (net 11 p0_b1)
+ (net 12 p0_r2)
+ (net 13 p0_g2)
+ (net 14 row_D)
+ (net 15 row_C)
+ (net 16 p0_b2)
+ (net 17 clock)
+ (net 18 row_B)
+ (net 19 row_A)
+ (net 20 p1_g1)
+ (net 21 p1_b1)
+ (net 22 p1_r1)
+ (net 23 p1_g2)
+ (net 24 p1_r2)
+ (net 25 p2_g2)
+ (net 26 p1_b2)
+ (net 27 p2_b2)
+ (net 28 p0_r1_buff)
+ (net 29 p0_g1_buff)
+ (net 30 p0_b1_buff)
+ (net 31 p0_r2_buff)
+ (net 32 p0_g2_buff)
+ (net 33 p0_b2_buff)
+ (net 34 row_A_buff)
+ (net 35 row_B_buff)
+ (net 36 row_C_buff)
+ (net 37 row_D_buff)
+ (net 38 clock_buff_0)
+ (net 39 strobe_buff_0)
+ (net 40 OE_buff_0)
+ (net 41 p1_r1_buff)
+ (net 42 p1_g1_buff)
+ (net 43 p1_b1_buff)
+ (net 44 p1_r2_buff)
+ (net 45 p1_g2_buf)
+ (net 46 p1_b2_buff)
+ (net 47 clock_buff_1)
+ (net 48 strobe_buff_1)
+ (net 49 OE_buff_1)
+ (net 50 p2_r1_buff)
+ (net 51 p2_g1_buff)
+ (net 52 p2_b1_buff)
+ (net 53 p2_r2_buff)
+ (net 54 p2_g2_buf)
+ (net 55 p2_b2_buff)
+ (net 56 clock_buff_2)
+ (net 57 strobe_buff_2)
+ (net 58 OE_buff_2)
+ (net 59 "Net-(P1-Pad1)")
+ (net 60 row_E)
+ (net 61 "Net-(P6-Pad1)")
+ (net 62 Sel-Pin4)
+ (net 63 Sel-Pin8)
+ (net 64 "Net-(P1-Pad9)")
+ (net 65 "Net-(P1-Pad17)")
+ (net 66 "Net-(P1-Pad27)")
+ (net 67 "Net-(P1-Pad28)")
+ (net 68 "Net-(P1-Pad30)")
+
+ (net_class Default "This is the default net class."
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net "Net-(P1-Pad1)")
+ (add_net "Net-(P1-Pad17)")
+ (add_net "Net-(P1-Pad27)")
+ (add_net "Net-(P1-Pad28)")
+ (add_net "Net-(P1-Pad30)")
+ (add_net "Net-(P1-Pad9)")
+ (add_net "Net-(P6-Pad1)")
+ (add_net OE)
+ (add_net OE_buff_0)
+ (add_net OE_buff_1)
+ (add_net OE_buff_2)
+ (add_net Sel-Pin4)
+ (add_net Sel-Pin8)
+ (add_net clock)
+ (add_net clock_buff_0)
+ (add_net clock_buff_1)
+ (add_net clock_buff_2)
+ (add_net p0_b1)
+ (add_net p0_b1_buff)
+ (add_net p0_b2)
+ (add_net p0_b2_buff)
+ (add_net p0_g1)
+ (add_net p0_g1_buff)
+ (add_net p0_g2)
+ (add_net p0_g2_buff)
+ (add_net p0_r1)
+ (add_net p0_r1_buff)
+ (add_net p0_r2)
+ (add_net p0_r2_buff)
+ (add_net p1_b1)
+ (add_net p1_b1_buff)
+ (add_net p1_b2)
+ (add_net p1_b2_buff)
+ (add_net p1_g1)
+ (add_net p1_g1_buff)
+ (add_net p1_g2)
+ (add_net p1_g2_buf)
+ (add_net p1_r1)
+ (add_net p1_r1_buff)
+ (add_net p1_r2)
+ (add_net p1_r2_buff)
+ (add_net p2_b1)
+ (add_net p2_b1_buff)
+ (add_net p2_b2)
+ (add_net p2_b2_buff)
+ (add_net p2_g1)
+ (add_net p2_g1_buff)
+ (add_net p2_g2)
+ (add_net p2_g2_buf)
+ (add_net p2_r1)
+ (add_net p2_r1_buff)
+ (add_net p2_r2)
+ (add_net p2_r2_buff)
+ (add_net row_A)
+ (add_net row_A_buff)
+ (add_net row_B)
+ (add_net row_B_buff)
+ (add_net row_C)
+ (add_net row_C_buff)
+ (add_net row_D)
+ (add_net row_D_buff)
+ (add_net row_E)
+ (add_net strobe)
+ (add_net strobe_buff_0)
+ (add_net strobe_buff_1)
+ (add_net strobe_buff_2)
+ )
+
+ (net_class power ""
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net GND)
+ (add_net VCC)
+ )
+
+ (module Resistor_SMD:R_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 55B7024A)
+ (at 105.664 46.736)
+ (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags resistor)
+ (path /55B6F717)
+ (attr smd)
+ (fp_text reference R1 (at 0 -1.65) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 10k (at 0 1.65) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.5 0.5) (thickness 0.08)))
+ )
+ (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (pad 2 smd roundrect (at 0.9375 0) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 59 "Net-(P1-Pad1)"))
+ (pad 1 smd roundrect (at -0.9375 0) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 10 OE))
+ (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitor_SMD:C_1206_3216Metric (layer F.Cu) (tedit 5B301BBE) (tstamp 562CDC72)
+ (at 87.376 41.783 90)
+ (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: http://www.tortai-tech.com/upload/download/2011102023233369053.pdf), generated with kicad-footprint-generator")
+ (tags capacitor)
+ (path /562B2FF4)
+ (attr smd)
+ (fp_text reference C6 (at 0 -1.82 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 22u (at 0 1.82 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.8 0.8) (thickness 0.12)))
+ )
+ (fp_line (start 2.28 1.12) (end -2.28 1.12) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 2.28 -1.12) (end 2.28 1.12) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -2.28 -1.12) (end 2.28 -1.12) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -2.28 1.12) (end -2.28 -1.12) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.602064 0.91) (end 0.602064 0.91) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.602064 -0.91) (end 0.602064 -0.91) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1))
+ (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1))
+ (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1))
+ (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1))
+ (pad 2 smd roundrect (at 1.4 0 90) (size 1.25 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.2)
+ (net 2 GND))
+ (pad 1 smd roundrect (at -1.4 0 90) (size 1.25 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.2)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitor_THT:CP_Radial_D6.3mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 562C0E7F)
+ (at 92.71 42.799 90)
+ (descr "CP, Radial series, Radial, pin pitch=2.50mm, , diameter=6.3mm, Electrolytic Capacitor")
+ (tags "CP Radial series Radial pin pitch 2.50mm diameter 6.3mm Electrolytic Capacitor")
+ (path /562B14A5)
+ (fp_text reference C5 (at 4.049 3.54 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 22u (at 1.25 4.4 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 1.25 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.935241 -2.154) (end -1.935241 -1.524) (layer F.SilkS) (width 0.12))
+ (fp_line (start -2.250241 -1.839) (end -1.620241 -1.839) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.491 -0.402) (end 4.491 0.402) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.451 -0.633) (end 4.451 0.633) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.411 -0.802) (end 4.411 0.802) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.371 -0.94) (end 4.371 0.94) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.331 -1.059) (end 4.331 1.059) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.291 -1.165) (end 4.291 1.165) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.251 -1.262) (end 4.251 1.262) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.211 -1.35) (end 4.211 1.35) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.171 -1.432) (end 4.171 1.432) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.131 -1.509) (end 4.131 1.509) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.091 -1.581) (end 4.091 1.581) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.051 -1.65) (end 4.051 1.65) (layer F.SilkS) (width 0.12))
+ (fp_line (start 4.011 -1.714) (end 4.011 1.714) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.971 -1.776) (end 3.971 1.776) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.931 -1.834) (end 3.931 1.834) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.891 -1.89) (end 3.891 1.89) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.851 -1.944) (end 3.851 1.944) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.811 -1.995) (end 3.811 1.995) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.771 -2.044) (end 3.771 2.044) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.731 -2.092) (end 3.731 2.092) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.691 -2.137) (end 3.691 2.137) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.651 -2.182) (end 3.651 2.182) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.611 -2.224) (end 3.611 2.224) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.571 -2.265) (end 3.571 2.265) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.531 1.04) (end 3.531 2.305) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.531 -2.305) (end 3.531 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.491 1.04) (end 3.491 2.343) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.491 -2.343) (end 3.491 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.451 1.04) (end 3.451 2.38) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.451 -2.38) (end 3.451 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.411 1.04) (end 3.411 2.416) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.411 -2.416) (end 3.411 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.371 1.04) (end 3.371 2.45) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.371 -2.45) (end 3.371 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.331 1.04) (end 3.331 2.484) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.331 -2.484) (end 3.331 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.291 1.04) (end 3.291 2.516) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.291 -2.516) (end 3.291 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.251 1.04) (end 3.251 2.548) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.251 -2.548) (end 3.251 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.211 1.04) (end 3.211 2.578) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.211 -2.578) (end 3.211 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.171 1.04) (end 3.171 2.607) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.171 -2.607) (end 3.171 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.131 1.04) (end 3.131 2.636) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.131 -2.636) (end 3.131 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.091 1.04) (end 3.091 2.664) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.091 -2.664) (end 3.091 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.051 1.04) (end 3.051 2.69) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.051 -2.69) (end 3.051 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.011 1.04) (end 3.011 2.716) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.011 -2.716) (end 3.011 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.971 1.04) (end 2.971 2.742) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.971 -2.742) (end 2.971 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.931 1.04) (end 2.931 2.766) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.931 -2.766) (end 2.931 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.891 1.04) (end 2.891 2.79) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.891 -2.79) (end 2.891 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.851 1.04) (end 2.851 2.812) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.851 -2.812) (end 2.851 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.811 1.04) (end 2.811 2.834) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.811 -2.834) (end 2.811 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.771 1.04) (end 2.771 2.856) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.771 -2.856) (end 2.771 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.731 1.04) (end 2.731 2.876) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.731 -2.876) (end 2.731 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.691 1.04) (end 2.691 2.896) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.691 -2.896) (end 2.691 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.651 1.04) (end 2.651 2.916) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.651 -2.916) (end 2.651 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.611 1.04) (end 2.611 2.934) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.611 -2.934) (end 2.611 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.571 1.04) (end 2.571 2.952) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.571 -2.952) (end 2.571 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.531 1.04) (end 2.531 2.97) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.531 -2.97) (end 2.531 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.491 1.04) (end 2.491 2.986) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.491 -2.986) (end 2.491 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.451 1.04) (end 2.451 3.002) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.451 -3.002) (end 2.451 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.411 1.04) (end 2.411 3.018) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.411 -3.018) (end 2.411 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.371 1.04) (end 2.371 3.033) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.371 -3.033) (end 2.371 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.331 1.04) (end 2.331 3.047) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.331 -3.047) (end 2.331 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.291 1.04) (end 2.291 3.061) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.291 -3.061) (end 2.291 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.251 1.04) (end 2.251 3.074) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.251 -3.074) (end 2.251 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.211 1.04) (end 2.211 3.086) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.211 -3.086) (end 2.211 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.171 1.04) (end 2.171 3.098) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.171 -3.098) (end 2.171 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.131 1.04) (end 2.131 3.11) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.131 -3.11) (end 2.131 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.091 1.04) (end 2.091 3.121) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.091 -3.121) (end 2.091 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.051 1.04) (end 2.051 3.131) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.051 -3.131) (end 2.051 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.011 1.04) (end 2.011 3.141) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.011 -3.141) (end 2.011 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.971 1.04) (end 1.971 3.15) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.971 -3.15) (end 1.971 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.93 1.04) (end 1.93 3.159) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.93 -3.159) (end 1.93 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.89 1.04) (end 1.89 3.167) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.89 -3.167) (end 1.89 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.85 1.04) (end 1.85 3.175) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.85 -3.175) (end 1.85 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.81 1.04) (end 1.81 3.182) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.81 -3.182) (end 1.81 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.77 1.04) (end 1.77 3.189) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.77 -3.189) (end 1.77 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.73 1.04) (end 1.73 3.195) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.73 -3.195) (end 1.73 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.69 1.04) (end 1.69 3.201) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.69 -3.201) (end 1.69 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.65 1.04) (end 1.65 3.206) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.65 -3.206) (end 1.65 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.61 1.04) (end 1.61 3.211) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.61 -3.211) (end 1.61 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.57 1.04) (end 1.57 3.215) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.57 -3.215) (end 1.57 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.53 1.04) (end 1.53 3.218) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.53 -3.218) (end 1.53 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.49 1.04) (end 1.49 3.222) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.49 -3.222) (end 1.49 -1.04) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.45 -3.224) (end 1.45 3.224) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.41 -3.227) (end 1.41 3.227) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.37 -3.228) (end 1.37 3.228) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.33 -3.23) (end 1.33 3.23) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.29 -3.23) (end 1.29 3.23) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.25 -3.23) (end 1.25 3.23) (layer F.SilkS) (width 0.12))
+ (fp_line (start -1.128972 -1.6885) (end -1.128972 -1.0585) (layer F.Fab) (width 0.1))
+ (fp_line (start -1.443972 -1.3735) (end -0.813972 -1.3735) (layer F.Fab) (width 0.1))
+ (fp_circle (center 1.25 0) (end 4.65 0) (layer F.CrtYd) (width 0.05))
+ (fp_circle (center 1.25 0) (end 4.52 0) (layer F.SilkS) (width 0.12))
+ (fp_circle (center 1.25 0) (end 4.4 0) (layer F.Fab) (width 0.1))
+ (pad 2 thru_hole circle (at 2.5 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/CP_Radial_D6.3mm_P2.50mm.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 5D222C8C)
+ (at 159.512 57.912 90)
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags capacitor)
+ (path /54F3B6F5)
+ (attr smd)
+ (fp_text reference C4 (at 2.662 1.238 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 100n (at 0 1.65 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.5 0.5) (thickness 0.08)))
+ )
+ (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (pad 2 smd roundrect (at 0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 1 smd roundrect (at -0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 54F3AAC3)
+ (at 141.732 57.912 90)
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags capacitor)
+ (path /54ECBF0A)
+ (attr smd)
+ (fp_text reference C3 (at 2.662 1.518 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 100n (at 0 1.65 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.5 0.5) (thickness 0.08)))
+ )
+ (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (pad 2 smd roundrect (at 0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 1 smd roundrect (at -0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 54F3AAB7)
+ (at 123.952 57.912 90)
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags capacitor)
+ (path /54ECBEE4)
+ (attr smd)
+ (fp_text reference C2 (at 2.662 1.298 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 100n (at 0 1.65 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.5 0.5) (thickness 0.08)))
+ )
+ (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (pad 2 smd roundrect (at 0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 1 smd roundrect (at -0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Capacitor_SMD:C_0805_2012Metric (layer F.Cu) (tedit 5B36C52B) (tstamp 54F3AAAB)
+ (at 106.172 57.912 90)
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags capacitor)
+ (path /54ECBE4F)
+ (attr smd)
+ (fp_text reference C1 (at 2.662 1.078 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 100n (at 0 1.65 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.5 0.5) (thickness 0.08)))
+ )
+ (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (pad 2 smd roundrect (at 0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 1 smd roundrect (at -0.9375 0 90) (size 0.975 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm (layer F.Cu) (tedit 5C97300E) (tstamp 5D2186D6)
+ (at 151.13 54.356 270)
+ (descr "SOIC, 20 Pin (JEDEC MS-013AC, https://www.analog.com/media/en/package-pcb-resources/package/233848rw_20.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
+ (tags "SOIC SO")
+ (path /5D23FE55)
+ (attr smd)
+ (fp_text reference U4 (at 0 -7.35 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74HCT245 (at 0 7.35 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 5.93 -6.65) (end -5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.93 6.65) (end 5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 6.65) (end 5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 -6.65) (end -5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.75 -5.4) (end -2.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.75 6.4) (end -3.75 -5.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 6.4) (end -3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 -6.4) (end 3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.75 -6.4) (end 3.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.86 -6.275) (end -5.675 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 -6.51) (end -3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end -3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 -6.51) (end 3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end 3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 6.51) (end -3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end -3.86 6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 6.51) (end 3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end 3.86 6.51) (layer F.SilkS) (width 0.12))
+ (pad 20 smd roundrect (at 4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (pad 19 smd roundrect (at 4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 18 smd roundrect (at 4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 58 OE_buff_2))
+ (pad 17 smd roundrect (at 4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 56 clock_buff_2))
+ (pad 16 smd roundrect (at 4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 55 p2_b2_buff))
+ (pad 15 smd roundrect (at 4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 53 p2_r2_buff))
+ (pad 14 smd roundrect (at 4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 54 p2_g2_buf))
+ (pad 13 smd roundrect (at 4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 52 p2_b1_buff))
+ (pad 12 smd roundrect (at 4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 50 p2_r1_buff))
+ (pad 11 smd roundrect (at 4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 51 p2_g1_buff))
+ (pad 10 smd roundrect (at -4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 9 smd roundrect (at -4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 3 p2_g1))
+ (pad 8 smd roundrect (at -4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 6 p2_r1))
+ (pad 7 smd roundrect (at -4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 4 p2_b1))
+ (pad 6 smd roundrect (at -4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 25 p2_g2))
+ (pad 5 smd roundrect (at -4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 7 p2_r2))
+ (pad 4 smd roundrect (at -4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 27 p2_b2))
+ (pad 3 smd roundrect (at -4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 17 clock))
+ (pad 2 smd roundrect (at -4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 10 OE))
+ (pad 1 smd roundrect (at -4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-20W_7.5x12.8mm_P1.27mm.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm (layer F.Cu) (tedit 5C97300E) (tstamp 5D2186AB)
+ (at 133.35 54.356 270)
+ (descr "SOIC, 20 Pin (JEDEC MS-013AC, https://www.analog.com/media/en/package-pcb-resources/package/233848rw_20.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
+ (tags "SOIC SO")
+ (path /5D23CC9C)
+ (attr smd)
+ (fp_text reference U3 (at 0 -7.35 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74HCT245 (at 0 7.35 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 5.93 -6.65) (end -5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.93 6.65) (end 5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 6.65) (end 5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 -6.65) (end -5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.75 -5.4) (end -2.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.75 6.4) (end -3.75 -5.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 6.4) (end -3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 -6.4) (end 3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.75 -6.4) (end 3.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.86 -6.275) (end -5.675 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 -6.51) (end -3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end -3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 -6.51) (end 3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end 3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 6.51) (end -3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end -3.86 6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 6.51) (end 3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end 3.86 6.51) (layer F.SilkS) (width 0.12))
+ (pad 20 smd roundrect (at 4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (pad 19 smd roundrect (at 4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 18 smd roundrect (at 4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 49 OE_buff_1))
+ (pad 17 smd roundrect (at 4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 47 clock_buff_1))
+ (pad 16 smd roundrect (at 4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 46 p1_b2_buff))
+ (pad 15 smd roundrect (at 4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 44 p1_r2_buff))
+ (pad 14 smd roundrect (at 4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 45 p1_g2_buf))
+ (pad 13 smd roundrect (at 4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 43 p1_b1_buff))
+ (pad 12 smd roundrect (at 4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 41 p1_r1_buff))
+ (pad 11 smd roundrect (at 4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 42 p1_g1_buff))
+ (pad 10 smd roundrect (at -4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 9 smd roundrect (at -4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 20 p1_g1))
+ (pad 8 smd roundrect (at -4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 22 p1_r1))
+ (pad 7 smd roundrect (at -4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 21 p1_b1))
+ (pad 6 smd roundrect (at -4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 23 p1_g2))
+ (pad 5 smd roundrect (at -4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 24 p1_r2))
+ (pad 4 smd roundrect (at -4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 26 p1_b2))
+ (pad 3 smd roundrect (at -4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 17 clock))
+ (pad 2 smd roundrect (at -4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 10 OE))
+ (pad 1 smd roundrect (at -4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-20W_7.5x12.8mm_P1.27mm.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm (layer F.Cu) (tedit 5C97300E) (tstamp 5D218680)
+ (at 115.57 54.356 270)
+ (descr "SOIC, 20 Pin (JEDEC MS-013AC, https://www.analog.com/media/en/package-pcb-resources/package/233848rw_20.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
+ (tags "SOIC SO")
+ (path /5D22AB08)
+ (attr smd)
+ (fp_text reference U2 (at 0 -7.35 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74HCT245 (at 0 7.35 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 5.93 -6.65) (end -5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.93 6.65) (end 5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 6.65) (end 5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 -6.65) (end -5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.75 -5.4) (end -2.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.75 6.4) (end -3.75 -5.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 6.4) (end -3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 -6.4) (end 3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.75 -6.4) (end 3.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.86 -6.275) (end -5.675 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 -6.51) (end -3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end -3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 -6.51) (end 3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end 3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 6.51) (end -3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end -3.86 6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 6.51) (end 3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end 3.86 6.51) (layer F.SilkS) (width 0.12))
+ (pad 20 smd roundrect (at 4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (pad 19 smd roundrect (at 4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 18 smd roundrect (at 4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 61 "Net-(P6-Pad1)"))
+ (pad 17 smd roundrect (at 4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 57 strobe_buff_2))
+ (pad 16 smd roundrect (at 4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 48 strobe_buff_1))
+ (pad 15 smd roundrect (at 4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 37 row_D_buff))
+ (pad 14 smd roundrect (at 4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 36 row_C_buff))
+ (pad 13 smd roundrect (at 4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 34 row_A_buff))
+ (pad 12 smd roundrect (at 4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 35 row_B_buff))
+ (pad 11 smd roundrect (at 4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 39 strobe_buff_0))
+ (pad 10 smd roundrect (at -4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 9 smd roundrect (at -4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 5 strobe))
+ (pad 8 smd roundrect (at -4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 18 row_B))
+ (pad 7 smd roundrect (at -4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 19 row_A))
+ (pad 6 smd roundrect (at -4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 15 row_C))
+ (pad 5 smd roundrect (at -4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 14 row_D))
+ (pad 4 smd roundrect (at -4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 5 strobe))
+ (pad 3 smd roundrect (at -4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 5 strobe))
+ (pad 2 smd roundrect (at -4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 60 row_E))
+ (pad 1 smd roundrect (at -4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-20W_7.5x12.8mm_P1.27mm.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm (layer F.Cu) (tedit 5C97300E) (tstamp 5D218655)
+ (at 97.79 54.356 270)
+ (descr "SOIC, 20 Pin (JEDEC MS-013AC, https://www.analog.com/media/en/package-pcb-resources/package/233848rw_20.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
+ (tags "SOIC SO")
+ (path /5D21950C)
+ (attr smd)
+ (fp_text reference U1 (at 0 -7.35 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value 74HCT245 (at 0 7.35 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 5.93 -6.65) (end -5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.93 6.65) (end 5.93 -6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 6.65) (end 5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -5.93 -6.65) (end -5.93 6.65) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.75 -5.4) (end -2.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.75 6.4) (end -3.75 -5.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 6.4) (end -3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 3.75 -6.4) (end 3.75 6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.75 -6.4) (end 3.75 -6.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.86 -6.275) (end -5.675 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 -6.51) (end -3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end -3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 -6.51) (end 3.86 -6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -6.51) (end 3.86 -6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.86 6.51) (end -3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end -3.86 6.51) (layer F.SilkS) (width 0.12))
+ (fp_line (start 3.86 6.51) (end 3.86 6.275) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 6.51) (end 3.86 6.51) (layer F.SilkS) (width 0.12))
+ (pad 20 smd roundrect (at 4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (pad 19 smd roundrect (at 4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 18 smd roundrect (at 4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 40 OE_buff_0))
+ (pad 17 smd roundrect (at 4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 38 clock_buff_0))
+ (pad 16 smd roundrect (at 4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 33 p0_b2_buff))
+ (pad 15 smd roundrect (at 4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 31 p0_r2_buff))
+ (pad 14 smd roundrect (at 4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 32 p0_g2_buff))
+ (pad 13 smd roundrect (at 4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 30 p0_b1_buff))
+ (pad 12 smd roundrect (at 4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 28 p0_r1_buff))
+ (pad 11 smd roundrect (at 4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 29 p0_g1_buff))
+ (pad 10 smd roundrect (at -4.65 5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 2 GND))
+ (pad 9 smd roundrect (at -4.65 4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 9 p0_g1))
+ (pad 8 smd roundrect (at -4.65 3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 8 p0_r1))
+ (pad 7 smd roundrect (at -4.65 1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 11 p0_b1))
+ (pad 6 smd roundrect (at -4.65 0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 13 p0_g2))
+ (pad 5 smd roundrect (at -4.65 -0.635 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 12 p0_r2))
+ (pad 4 smd roundrect (at -4.65 -1.905 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 16 p0_b2))
+ (pad 3 smd roundrect (at -4.65 -3.175 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 17 clock))
+ (pad 2 smd roundrect (at -4.65 -4.445 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 10 OE))
+ (pad 1 smd roundrect (at -4.65 -5.715 270) (size 2.05 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
+ (net 1 VCC))
+ (model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-20W_7.5x12.8mm_P1.27mm.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical (layer F.Cu) (tedit 59DE0341) (tstamp 54F3AB67)
+ (at 144.78 67.056 90)
+ (descr "Through hole straight IDC box header, 2x08, 2.54mm pitch, double rows")
+ (tags "Through hole IDC box header THT 2x08 2.54mm double row")
+ (path /54F3E6D5)
+ (fp_text reference Panel-3 (at 1.27 -6.604 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X08 (at 1.27 24.384 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.655 -5.6) (end -1.115 -5.6) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.655 -5.6) (end -3.655 -3.06) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.405 -5.35) (end 5.945 -5.35) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.405 23.13) (end -3.405 -5.35) (layer F.SilkS) (width 0.12))
+ (fp_line (start 5.945 23.13) (end -3.405 23.13) (layer F.SilkS) (width 0.12))
+ (fp_line (start 5.945 -5.35) (end 5.945 23.13) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.41 -5.35) (end 5.95 -5.35) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.41 23.13) (end -3.41 -5.35) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.95 23.13) (end -3.41 23.13) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.95 -5.35) (end 5.95 23.13) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.155 22.88) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.155 -5.1) (end -2.605 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 22.88) (end 5.145 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end 5.145 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 22.32) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 22.88) (end -3.155 22.88) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 -4.56) (end -2.605 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end -3.155 -5.1) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 11.14) (end -3.155 11.14) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 6.64) (end -3.155 6.64) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 11.14) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 -4.56) (end -2.605 6.64) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.155 -5.1) (end -3.155 22.88) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 -4.56) (end 5.145 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end 5.695 22.88) (layer F.Fab) (width 0.1))
+ (fp_text user %R (at 1.27 8.89 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 58 OE_buff_2))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 57 strobe_buff_2))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 56 clock_buff_2))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 37 row_D_buff))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 36 row_C_buff))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 35 row_B_buff))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 34 row_A_buff))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 63 Sel-Pin8))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 55 p2_b2_buff))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 54 p2_g2_buf))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 53 p2_r2_buff))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 62 Sel-Pin4))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 52 p2_b1_buff))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 51 p2_g1_buff))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 50 p2_r1_buff))
+ (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x08_P2.54mm_Vertical.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical (layer F.Cu) (tedit 59DE0341) (tstamp 54F3AB47)
+ (at 116.84 67.056 90)
+ (descr "Through hole straight IDC box header, 2x08, 2.54mm pitch, double rows")
+ (tags "Through hole IDC box header THT 2x08 2.54mm double row")
+ (path /54ECE201)
+ (fp_text reference Panel-2 (at 1.27 -6.604 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X08 (at 1.27 24.384 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.655 -5.6) (end -1.115 -5.6) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.655 -5.6) (end -3.655 -3.06) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.405 -5.35) (end 5.945 -5.35) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.405 23.13) (end -3.405 -5.35) (layer F.SilkS) (width 0.12))
+ (fp_line (start 5.945 23.13) (end -3.405 23.13) (layer F.SilkS) (width 0.12))
+ (fp_line (start 5.945 -5.35) (end 5.945 23.13) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.41 -5.35) (end 5.95 -5.35) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.41 23.13) (end -3.41 -5.35) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.95 23.13) (end -3.41 23.13) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.95 -5.35) (end 5.95 23.13) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.155 22.88) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.155 -5.1) (end -2.605 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 22.88) (end 5.145 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end 5.145 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 22.32) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 22.88) (end -3.155 22.88) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 -4.56) (end -2.605 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end -3.155 -5.1) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 11.14) (end -3.155 11.14) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 6.64) (end -3.155 6.64) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 11.14) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 -4.56) (end -2.605 6.64) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.155 -5.1) (end -3.155 22.88) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 -4.56) (end 5.145 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end 5.695 22.88) (layer F.Fab) (width 0.1))
+ (fp_text user %R (at 1.27 8.89 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 49 OE_buff_1))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 48 strobe_buff_1))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 47 clock_buff_1))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 37 row_D_buff))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 36 row_C_buff))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 35 row_B_buff))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 34 row_A_buff))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 63 Sel-Pin8))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 46 p1_b2_buff))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 45 p1_g2_buf))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 44 p1_r2_buff))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 62 Sel-Pin4))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 43 p1_b1_buff))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 42 p1_g1_buff))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 41 p1_r1_buff))
+ (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x08_P2.54mm_Vertical.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical (layer F.Cu) (tedit 59DE0341) (tstamp 54F3AB27)
+ (at 88.9 67.056 90)
+ (descr "Through hole straight IDC box header, 2x08, 2.54mm pitch, double rows")
+ (tags "Through hole IDC box header THT 2x08 2.54mm double row")
+ (path /54ECB236)
+ (fp_text reference Panel-1 (at 1.27 -6.604 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X08 (at 1.27 24.384 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -3.655 -5.6) (end -1.115 -5.6) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.655 -5.6) (end -3.655 -3.06) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.405 -5.35) (end 5.945 -5.35) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.405 23.13) (end -3.405 -5.35) (layer F.SilkS) (width 0.12))
+ (fp_line (start 5.945 23.13) (end -3.405 23.13) (layer F.SilkS) (width 0.12))
+ (fp_line (start 5.945 -5.35) (end 5.945 23.13) (layer F.SilkS) (width 0.12))
+ (fp_line (start -3.41 -5.35) (end 5.95 -5.35) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.41 23.13) (end -3.41 -5.35) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.95 23.13) (end -3.41 23.13) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 5.95 -5.35) (end 5.95 23.13) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.155 22.88) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.155 -5.1) (end -2.605 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 22.88) (end 5.145 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end 5.145 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 22.32) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 22.88) (end -3.155 22.88) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 -4.56) (end -2.605 -4.56) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end -3.155 -5.1) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 11.14) (end -3.155 11.14) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 6.64) (end -3.155 6.64) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 11.14) (end -2.605 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.605 -4.56) (end -2.605 6.64) (layer F.Fab) (width 0.1))
+ (fp_line (start -3.155 -5.1) (end -3.155 22.88) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.145 -4.56) (end 5.145 22.32) (layer F.Fab) (width 0.1))
+ (fp_line (start 5.695 -5.1) (end 5.695 22.88) (layer F.Fab) (width 0.1))
+ (fp_text user %R (at 1.27 8.89 90) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 40 OE_buff_0))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 39 strobe_buff_0))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 38 clock_buff_0))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 37 row_D_buff))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 36 row_C_buff))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 35 row_B_buff))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 34 row_A_buff))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 63 Sel-Pin8))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 33 p0_b2_buff))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 32 p0_g2_buff))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 31 p0_r2_buff))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 62 Sel-Pin4))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 30 p0_b1_buff))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 29 p0_g1_buff))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask)
+ (net 28 p0_r1_buff))
+ (model ${KISYS3DMOD}/Connector_IDC.3dshapes/IDC-Header_2x08_P2.54mm_Vertical.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_1x01 (layer F.Cu) (tedit 57A69475) (tstamp 562BCAF0)
+ (at 110.744 45.847 180)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /562BCB6A)
+ (fp_text reference P5 (at 0 -5.1 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value GND (at -3.937 -0.127 180) (layer F.SilkS)
+ (effects (font (size 1.5 1.5) (thickness 0.2)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.75 -1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.524 0) (end 1.524 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start -4.5 -1.55) (end 1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 180) (size 1.9 1.9) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_1x01 (layer F.Cu) (tedit 57A69464) (tstamp 562C7B86)
+ (at 119.38 45.847 180)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /562B292A)
+ (fp_text reference P3 (at 0 -5.1 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value RxD (at -3.81 -0.127 180) (layer F.SilkS)
+ (effects (font (size 1.5 1.5) (thickness 0.2)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.75 -1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.55 0) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end 4.5 -1.55) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 180) (size 1.9 1.9) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 60 row_E))
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_1x01 (layer F.Cu) (tedit 57A692FC) (tstamp 562E7319)
+ (at 87.376 46.99 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /562B3873)
+ (fp_text reference P2 (at -2.286 0 180) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value +5V (at 0 -5.334 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 1.576 -2.159) (end 1.576 -0.609) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.75 -1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -2.54 -2.159) (end 1.576 -2.159) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole oval (at 0 0 90) (size 2.2 4) (drill 1.2) (layers *.Cu *.Mask F.SilkS)
+ (net 1 VCC))
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_1x01 (layer F.Cu) (tedit 57A692E9) (tstamp 562E7331)
+ (at 87.376 50.8 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /562B38C3)
+ (fp_text reference P4 (at 0.254 2.54 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value GND (at 0 -5.08 180) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.75 -1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 1.75) (end 1.75 1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.524 -0.609) (end -1.524 -2.159) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.524 -2.159) (end 1.576 -2.159) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole oval (at 0 0 90) (size 2.2 4) (drill 1.2) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 57A694D7) (tstamp 5737608F)
+ (at 86.36 59.182 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /57374379)
+ (fp_text reference P8 (at 0 -5.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_01X02 (at 0 -3.1 90) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.27 -1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.27 -1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 3.81) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 2 thru_hole rect (at 0 2.54 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 57A694D1) (tstamp 5737606D)
+ (at 86.36 54.102 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /573741C0)
+ (fp_text reference P6 (at 0 -5.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_01X02 (at 0 -3.1 90) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 1.27 1.27) (end 1.27 3.81) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.27 -1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 3.81) (end 1.27 3.81) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 61 "Net-(P6-Pad1)"))
+ (pad 2 thru_hole rect (at 0 2.54 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 61 "Net-(P6-Pad1)"))
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_1x02 (layer F.Cu) (tedit 57A694DA) (tstamp 5737607E)
+ (at 86.36 56.642 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /573743CD)
+ (fp_text reference P7 (at 0 -5.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X01 (at 0 -3.1 90) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.75 -1.75) (end 1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 1.75 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 4.3) (end 1.75 4.3) (layer F.CrtYd) (width 0.05))
+ (pad 1 thru_hole circle (at 0 0 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 62 Sel-Pin4))
+ (pad 2 thru_hole oval (at 0 2.54 90) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 63 Sel-Pin8))
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x20 (layer F.Cu) (tedit 562B1708) (tstamp 54F3AB07)
+ (at 107.95 43.18 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /54ECB2B7)
+ (fp_text reference P1 (at 3.302 -2.286 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X20 (at 0 -3.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 50.05) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 50.05) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 50.05) (end 4.3 50.05) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 49.53) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 49.53) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 49.53) (end -1.27 49.53) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 59 "Net-(P1-Pad1)"))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 VCC))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 p2_g1))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 VCC))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 p2_b1))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 strobe))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 p2_r1))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 64 "Net-(P1-Pad9)"))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 60 row_E))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 17 clock))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 OE))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 p0_g1))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 19 row_A))
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 18 row_B))
+ (pad 17 thru_hole oval (at 0 20.32 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 65 "Net-(P1-Pad17)"))
+ (pad 18 thru_hole oval (at 2.54 20.32 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 15 row_C))
+ (pad 19 thru_hole oval (at 0 22.86 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 16 p0_b2))
+ (pad 20 thru_hole oval (at 2.54 22.86 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 21 thru_hole oval (at 0 25.4 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 13 p0_g2))
+ (pad 22 thru_hole oval (at 2.54 25.4 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 row_D))
+ (pad 23 thru_hole oval (at 0 27.94 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 p0_r1))
+ (pad 24 thru_hole oval (at 2.54 27.94 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 p0_r2))
+ (pad 25 thru_hole oval (at 0 30.48 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 26 thru_hole oval (at 2.54 30.48 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 11 p0_b1))
+ (pad 27 thru_hole oval (at 0 33.02 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 66 "Net-(P1-Pad27)"))
+ (pad 28 thru_hole oval (at 2.54 33.02 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 67 "Net-(P1-Pad28)"))
+ (pad 29 thru_hole oval (at 0 35.56 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 20 p1_g1))
+ (pad 30 thru_hole oval (at 2.54 35.56 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 68 "Net-(P1-Pad30)"))
+ (pad 31 thru_hole oval (at 0 38.1 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 21 p1_b1))
+ (pad 32 thru_hole oval (at 2.54 38.1 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 22 p1_r1))
+ (pad 33 thru_hole oval (at 0 40.64 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 23 p1_g2))
+ (pad 34 thru_hole oval (at 2.54 40.64 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 35 thru_hole oval (at 0 43.18 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 24 p1_r2))
+ (pad 36 thru_hole oval (at 2.54 43.18 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 25 p2_g2))
+ (pad 37 thru_hole oval (at 0 45.72 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 p2_r2))
+ (pad 38 thru_hole oval (at 2.54 45.72 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 26 p1_b2))
+ (pad 39 thru_hole oval (at 0 48.26 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 40 thru_hole oval (at 2.54 48.26 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 27 p2_b2))
+ (model Pin_Headers/Pin_Header_Straight_2x20.wrl
+ (offset (xyz 1.269999980926514 -24.12999963760376 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Connect:1pin locked (layer F.Cu) (tedit 562B1509) (tstamp 54F3F77D)
+ (at 103.08 41.91)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54F43868)
+ (fp_text reference P20 (at 0.044 0) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_01X01 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module Connect:1pin locked (layer F.Cu) (tedit 562B1502) (tstamp 54F3F783)
+ (at 161.08 41.91)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54F43A29)
+ (fp_text reference P21 (at -0.044 0) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_01X01 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module Fiducials:Fiducial_1mm_Dia_2.54mm_Outer_CopperTop locked (layer F.Cu) (tedit 562BD77F) (tstamp 5D21A6A5)
+ (at 161.7 38)
+ (descr "Circular Fiducial, 1mm bare copper top; 2.54mm keepout")
+ (tags marker)
+ (attr virtual)
+ (fp_text reference REF** (at 3.4 0.7) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value TopRight (at 6.434 -2.17) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1.55 0) (layer F.CrtYd) (width 0.05))
+ (pad ~ smd circle (at 0 0) (size 1 1) (layers F.Cu F.Mask)
+ (solder_mask_margin 0.77) (clearance 0.77))
+ )
+
+ (module Fiducials:Fiducial_1mm_Dia_2.54mm_Outer_CopperTop locked (layer F.Cu) (tedit 562BD774) (tstamp 562D8101)
+ (at 86 70)
+ (descr "Circular Fiducial, 1mm bare copper top; 2.54mm keepout")
+ (tags marker)
+ (attr virtual)
+ (fp_text reference REF** (at -3.958 0.739) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value BottomLeft (at -0.402 2.517) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1.55 0) (layer F.CrtYd) (width 0.05))
+ (pad ~ smd circle (at 0 0) (size 1 1) (layers F.Cu F.Mask)
+ (solder_mask_margin 0.77) (clearance 0.77))
+ )
+
+ (module Symbols:Symbol_OSHW-Logo_SilkScreen locked (layer F.Cu) (tedit 562BD9C4) (tstamp 5D21AAA4)
+ (at 98.4 42.8)
+ (descr "Symbol, OSHW-Logo, Silk Screen,")
+ (tags "Symbol, OSHW-Logo, Silk Screen,")
+ (fp_text reference REF** (at 6.477 -3.175) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Symbol_OSHW-Logo_SilkScreen (at 5.461 5.461 90) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 1.66878 2.68986) (end 2.02946 4.16052) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.02946 4.16052) (end 2.30886 3.0988) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.30886 3.0988) (end 2.61874 4.17068) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.61874 4.17068) (end 2.9591 2.72034) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.24892 3.38074) (end 1.03886 3.37058) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.03886 3.37058) (end 1.04902 3.38074) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.04902 3.38074) (end 1.04902 3.37058) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.08966 2.65938) (end 1.08966 4.20116) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.20066 2.64922) (end 0.20066 4.21894) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.20066 4.21894) (end 0.21082 4.20878) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.35052 2.75082) (end -0.70104 2.66954) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.70104 2.66954) (end -1.02108 2.65938) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.02108 2.65938) (end -1.25984 2.86004) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.25984 2.86004) (end -1.29032 3.12928) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.29032 3.12928) (end -1.04902 3.37058) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.04902 3.37058) (end -0.6604 3.50012) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.6604 3.50012) (end -0.48006 3.66014) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.48006 3.66014) (end -0.43942 3.95986) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.43942 3.95986) (end -0.67056 4.18084) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.67056 4.18084) (end -0.9906 4.20878) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.9906 4.20878) (end -1.34112 4.09956) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.37998 2.64922) (end -2.6289 2.66954) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.6289 2.66954) (end -2.8702 2.91084) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.8702 2.91084) (end -2.9591 3.40106) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.9591 3.40106) (end -2.93116 3.74904) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.93116 3.74904) (end -2.7305 4.06908) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.7305 4.06908) (end -2.47904 4.191) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.47904 4.191) (end -2.16916 4.11988) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.16916 4.11988) (end -1.95072 3.93954) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.95072 3.93954) (end -1.8796 3.4798) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.8796 3.4798) (end -1.9304 3.07086) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.9304 3.07086) (end -2.03962 2.78892) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.03962 2.78892) (end -2.4003 2.65938) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.78054 0.92964) (end -2.03962 1.49098) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.03962 1.49098) (end -1.50114 2.00914) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.50114 2.00914) (end -0.98044 1.7399) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.98044 1.7399) (end -0.70104 1.89992) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.73914 1.8796) (end 1.06934 1.6891) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.06934 1.6891) (end 1.50876 2.0193) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.50876 2.0193) (end 1.9812 1.52908) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.9812 1.52908) (end 1.69926 1.04902) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.69926 1.04902) (end 1.88976 0.57912) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.88976 0.57912) (end 2.49936 0.39116) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.49936 0.39116) (end 2.49936 -0.28956) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.49936 -0.28956) (end 1.94056 -0.42926) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.94056 -0.42926) (end 1.7399 -1.00076) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.7399 -1.00076) (end 2.00914 -1.47066) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.00914 -1.47066) (end 1.53924 -1.9812) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.53924 -1.9812) (end 1.02108 -1.71958) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.02108 -1.71958) (end 0.55118 -1.92024) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.55118 -1.92024) (end 0.381 -2.46126) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.381 -2.46126) (end -0.30988 -2.47904) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.30988 -2.47904) (end -0.5207 -1.9304) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.5207 -1.9304) (end -0.9398 -1.76022) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.9398 -1.76022) (end -1.49098 -2.02946) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.49098 -2.02946) (end -2.00914 -1.50114) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.00914 -1.50114) (end -1.76022 -0.96012) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.76022 -0.96012) (end -1.9304 -0.48006) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.9304 -0.48006) (end -2.47904 -0.381) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.47904 -0.381) (end -2.4892 0.32004) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.4892 0.32004) (end -1.9304 0.5207) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.9304 0.5207) (end -1.7907 0.91948) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.35052 0.89916) (end 0.65024 0.7493) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.65024 0.7493) (end 0.8509 0.55118) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.8509 0.55118) (end 1.00076 0.14986) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.00076 0.14986) (end 1.00076 -0.24892) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.00076 -0.24892) (end 0.8509 -0.59944) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.8509 -0.59944) (end 0.39878 -0.94996) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.39878 -0.94996) (end -0.0508 -1.00076) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.0508 -1.00076) (end -0.44958 -0.89916) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.44958 -0.89916) (end -0.8509 -0.55118) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.8509 -0.55118) (end -1.00076 -0.09906) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.00076 -0.09906) (end -0.94996 0.39878) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.94996 0.39878) (end -0.70104 0.70104) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.70104 0.70104) (end -0.35052 0.89916) (layer F.SilkS) (width 0.15))
+ (fp_line (start -0.35052 0.89916) (end -0.70104 1.89992) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0.35052 0.89916) (end 0.7493 1.89992) (layer F.SilkS) (width 0.15))
+ )
+
+ (gr_line (start 165 60.5) (end 165.5 60.5) (layer Edge.Cuts) (width 0.1) (tstamp 5D21B6D3))
+ (gr_arc (start 165.5 62) (end 165.5 60.5) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_arc (start 85.5 37.5) (end 85.5 36) (angle -90) (layer Edge.Cuts) (width 0.1))
+ (gr_arc (start 165 59) (end 165 60.5) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_arc (start 162 37.5) (end 162 36) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_line (start 167 62) (end 167 71.5) (layer Edge.Cuts) (width 0.1) (tstamp 5D21B418))
+ (gr_line (start 163.5 37.5) (end 163.5 59) (layer Edge.Cuts) (width 0.1))
+ (gr_text "G\nN\nD" (at 90.678 59.436) (layer F.SilkS) (tstamp 57A69D7E)
+ (effects (font (size 0.7 1) (thickness 0.175)))
+ )
+ (gr_text E (at 90.678 54.102) (layer F.SilkS) (tstamp 57A69D79)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (gr_text "G\nN\nD" (at 84.582 59.436) (layer F.SilkS) (tstamp 57A69C6E)
+ (effects (font (size 0.7 1) (thickness 0.175)))
+ )
+ (gr_text E (at 84.582 54.102) (layer F.SilkS) (tstamp 57A69C50)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (gr_text "←E Config" (at 86.614 64.516 270) (layer F.SilkS) (tstamp 57A68B17)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (gr_text "↙Pi Power in" (at 96.5 47.75) (layer F.SilkS) (tstamp 57A68A46)
+ (effects (font (size 1.1 1.1) (thickness 0.2)))
+ )
+ (gr_text 8 (at 90.678 56.642) (layer F.SilkS) (tstamp 57A68660)
+ (effects (font (size 1.3 1.1) (thickness 0.2)))
+ )
+ (gr_text "+5V GND" (at 90.17 48.514 270) (layer F.SilkS)
+ (effects (font (size 1.1 1.1) (thickness 0.2)))
+ )
+ (gr_text "4\n" (at 84.582 56.642) (layer F.SilkS)
+ (effects (font (size 1.3 1.1) (thickness 0.2)))
+ )
+ (gr_text 1 (at 144.78 70.358) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.25)))
+ )
+ (gr_text 1 (at 116.84 70.358) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.25)))
+ )
+ (gr_text 1 (at 88.9 70.358) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.25)))
+ )
+ (gr_text 1 (at 105.156 49.022 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.25)))
+ )
+ (gr_text 1 (at 158.496 49.022 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.25)))
+ )
+ (gr_text 1 (at 140.716 49.022 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.25)))
+ )
+ (gr_text %%gitversion%% (at 135.636 51.816) (layer B.SilkS)
+ (effects (font (size 1.2 1.2) (thickness 0.2)) (justify left mirror))
+ )
+ (gr_text 1 (at 122.936 49.022 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.25)))
+ )
+ (gr_text github.com/hzeller/rpi-rgb-led-matrix (at 128 37.75) (layer F.SilkS)
+ (effects (font (size 2 2) (thickness 0.3)))
+ )
+ (gr_text Interfaces→ (at 161.7 46.95) (layer F.SilkS)
+ (effects (font (size 1.2 1.2) (thickness 0.2)) (justify right))
+ )
+ (gr_line (start 151.765 69.977) (end 155.575 69.977) (angle 90) (layer F.SilkS) (width 2))
+ (gr_line (start 95.885 69.977) (end 99.695 69.977) (angle 90) (layer F.SilkS) (width 2))
+ (gr_line (start 123.825 69.977) (end 127.635 69.977) (angle 90) (layer F.SilkS) (width 2))
+ (gr_text "Bottom Chain (3)\n" (at 153.67 60.5) (layer F.SilkS)
+ (effects (font (size 0.8 0.8) (thickness 0.15)))
+ )
+ (gr_text "Middle Chain (2)" (at 126.492 60.5) (layer F.SilkS)
+ (effects (font (size 0.8 0.8) (thickness 0.15)))
+ )
+ (gr_text "Top Chain (1)" (at 98 60.5) (layer F.SilkS)
+ (effects (font (size 0.8 0.8) (thickness 0.15)))
+ )
+ (gr_line (start 84 71.5) (end 84 37.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556BCFD5))
+ (gr_line (start 85.5 36) (end 162 36) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_line (start 167 71.5) (end 84 71.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556BCFD8))
+
+ (segment (start 92.71 42.799) (end 88.36 42.799) (width 0.4064) (layer F.Cu) (net 1))
+ (segment (start 88.36 42.799) (end 87.376 43.783) (width 0.4064) (layer F.Cu) (net 1) (tstamp 562BC78D))
+ (segment (start 87.376 43.783) (end 87.376 47.244) (width 0.4064) (layer F.Cu) (net 1))
+ (segment (start 87.376 47.244) (end 89.662 47.244) (width 0.4064) (layer B.Cu) (net 1))
+ (segment (start 89.662 47.244) (end 90.805 47.244) (width 0.4064) (layer B.Cu) (net 1))
+ (segment (start 92.71 42.799) (end 92.71 45.212) (width 0.4064) (layer B.Cu) (net 1))
+ (segment (start 90.805 47.117) (end 90.805 47.244) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562BC782))
+ (segment (start 90.678 47.244) (end 90.805 47.117) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562BC780))
+ (segment (start 92.71 45.212) (end 90.678 47.244) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562BC766))
+ (segment (start 90.805 47.244) (end 102.362 47.244) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562BC783))
+ (segment (start 102.362 47.244) (end 105.664 43.942) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C7CBE))
+ (segment (start 139.065 51.0123) (end 139.065 54.102) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 139.065 49.656) (end 139.065 51.0123) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 139.065 54.102) (end 139.192 54.102) (width 0.254) (layer F.Cu) (net 1) (tstamp 562C0D21))
+ (segment (start 142.7383 59.162) (end 143.022 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 141.732 59.162) (end 142.7383 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 143.256 58.928) (end 143.256 54.102) (width 0.254) (layer F.Cu) (net 1) (tstamp 562C0D1A))
+ (segment (start 143.022 59.162) (end 143.256 58.928) (width 0.254) (layer F.Cu) (net 1) (tstamp 562C0D19))
+ (segment (start 156.845 51.0123) (end 156.845 53.975) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 156.845 49.656) (end 156.845 51.0123) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 156.845 53.975) (end 156.718 54.102) (width 0.254) (layer F.Cu) (net 1) (tstamp 562C0D13))
+ (segment (start 156.845 57.6997) (end 156.845 54.229) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 156.845 58.3778) (end 156.845 57.6997) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 129.54 54.102) (end 139.192 54.102) (width 0.4064) (layer F.Cu) (net 1) (tstamp 562C0D07))
+ (segment (start 139.192 54.102) (end 143.256 54.102) (width 0.4064) (layer F.Cu) (net 1) (tstamp 562C0D24))
+ (segment (start 129.54 54.102) (end 124.48 59.162) (width 0.4064) (layer F.Cu) (net 1) (tstamp 562C0D05))
+ (segment (start 143.256 54.102) (end 156.718 54.102) (width 0.4064) (layer F.Cu) (net 1) (tstamp 562C0D1D))
+ (segment (start 156.845 54.229) (end 156.718 54.102) (width 0.254) (layer F.Cu) (net 1) (tstamp 562C0D10))
+ (segment (start 122.448 59.056) (end 122.554 59.162) (width 0.4064) (layer F.Cu) (net 1))
+ (segment (start 122.554 59.162) (end 124.48 59.162) (width 0.4064) (layer F.Cu) (net 1) (tstamp 562C0D04))
+ (segment (start 122.448 59.056) (end 119.526 56.134) (width 0.4064) (layer B.Cu) (net 1))
+ (via (at 122.448 59.056) (size 0.889) (layers F.Cu B.Cu) (net 1))
+ (segment (start 119.526 56.134) (end 105.664 56.134) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C0CFD))
+ (segment (start 104.6595 58.6558) (end 105.664 57.6513) (width 0.4064) (layer B.Cu) (net 1))
+ (via (at 104.6595 58.6558) (size 0.889) (layers F.Cu B.Cu) (net 1))
+ (segment (start 105.664 57.6513) (end 105.664 56.134) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C0CEE))
+ (segment (start 107.188 41.148) (end 107.442 41.148) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C0CF0))
+ (segment (start 105.664 43.942) (end 105.664 42.672) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C7CC2))
+ (segment (start 105.664 42.672) (end 107.188 41.148) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C0CEF))
+ (segment (start 105.664 56.134) (end 105.664 47.244) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C0D01))
+ (segment (start 105.664 47.244) (end 105.664 43.942) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C100A))
+ (segment (start 107.442 41.148) (end 107.95 40.64) (width 0.4064) (layer B.Cu) (net 1) (tstamp 562C0CF1))
+ (segment (start 159.512 59.162) (end 158.5057 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 156.845 58.3778) (end 157.7215 58.3778) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 157.7215 58.3778) (end 158.5057 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 156.845 59.056) (end 156.845 58.3778) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 104.5845 48.5765) (end 103.505 49.656) (width 0.4064) (layer F.Cu) (net 1))
+ (segment (start 107.95 40.64) (end 107.696 40.64) (width 0.4064) (layer F.Cu) (net 1))
+ (segment (start 107.696 40.64) (end 105.664 42.672) (width 0.4064) (layer F.Cu) (net 1))
+ (segment (start 104.6595 58.6558) (end 105.1657 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 103.505 58.3778) (end 104.3815 58.3778) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 104.3815 58.3778) (end 104.6595 58.6558) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 106.172 59.162) (end 105.1657 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 103.505 59.056) (end 103.505 58.3778) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 122.448 59.056) (end 122.8397 59.056) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 122.8397 59.056) (end 122.9457 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 121.285 59.056) (end 122.448 59.056) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 123.952 59.162) (end 122.9457 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 141.732 59.162) (end 140.7257 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 139.065 59.056) (end 139.065 60.4123) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 139.065 60.4123) (end 139.6012 60.4123) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 139.6012 60.4123) (end 140.7257 59.2878) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 140.7257 59.2878) (end 140.7257 59.162) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 107.95 40.64) (end 110.49 40.64) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 121.285 49.656) (end 121.715258 49.656) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 122.575721 51.620021) (end 111.814621 51.620021) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 107.5698 51.5618) (end 104.5845 48.5765) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 111.7564 51.5618) (end 107.5698 51.5618) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 124.190759 47.180499) (end 125.110241 47.180499) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 111.814621 51.620021) (end 111.7564 51.5618) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 125.429959 48.765783) (end 122.575721 51.620021) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 121.715258 49.656) (end 124.190759 47.180499) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 125.429959 47.500217) (end 125.429959 48.765783) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 125.110241 47.180499) (end 125.429959 47.500217) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 104.5845 48.461546) (end 104.5845 48.5765) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 105.664 47.382046) (end 104.5845 48.461546) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 105.664 42.672) (end 105.664 47.382046) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 108.966 64.516) (end 109.347 64.135) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 109.347 64.135) (end 109.347 63.373) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 106.68 64.516) (end 108.966 64.516) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 107.95 61.976) (end 109.347 63.373) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 105.657617 61.976) (end 107.95 61.976) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 105.029 61.976) (end 105.657617 61.976) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 102.235 59.056) (end 102.235 59.731) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 102.235 59.731) (end 104.48 61.976) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 104.48 61.976) (end 105.029 61.976) (width 0.254) (layer F.Cu) (net 2))
+ (via (at 105.029 61.976) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 2))
+ (segment (start 127.635 51.0123) (end 124.9583 53.689) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 124.9583 53.689) (end 124.9583 56.662) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 123.952 56.662) (end 124.9583 56.662) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 127.635 49.656) (end 127.635 51.0123) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 113.03 40.64) (end 111.76 41.91) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 111.76 41.91) (end 111.76 44.831) (width 0.254) (layer F.Cu) (net 2) (tstamp 562BCB6E))
+ (segment (start 111.76 44.831) (end 110.744 45.847) (width 0.254) (layer F.Cu) (net 2) (tstamp 562BCB6F))
+ (segment (start 87.376 39.783) (end 92.194 39.783) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 92.194 39.783) (end 92.71 40.299) (width 0.4064) (layer F.Cu) (net 2) (tstamp 562BC792))
+ (segment (start 147.812 40.64) (end 147.3451 41.1069) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 147.3451 41.1069) (end 146.5671 41.8849) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 146.5671 41.8849) (end 144.78 41.8849) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 147.812 40.64) (end 148.59 40.64) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B3845))
+ (segment (start 129.55645 40.11555) (end 130.0809 40.64) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 130.0809 40.64) (end 130.81 40.64) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B382B))
+ (segment (start 154.95645 42.65555) (end 155.4809 43.18) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 155.4809 43.18) (end 156.21 43.18) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B3808))
+ (segment (start 139.1591 43.18) (end 139.6749 42.6642) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 140.4542 41.8849) (end 144.78 41.8849) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 140.4542 41.8849) (end 139.6749 42.6642) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 139.1591 43.18) (end 138.43 43.18) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B37FC))
+ (segment (start 136.398 41.91) (end 137.668 43.18) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 137.668 43.18) (end 138.43 43.18) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B37F3))
+ (segment (start 123.9681 40.64) (end 124.4349 40.1732) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 128.8159 39.375) (end 129.55645 40.11555) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 129.55645 40.11555) (end 129.5651 40.1242) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B3829))
+ (segment (start 125.2331 39.375) (end 128.8159 39.375) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.4349 40.1732) (end 125.2331 39.375) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 123.9681 40.64) (end 123.19 40.64) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B37DF))
+ (segment (start 123.19 40.64) (end 122.4997 40.64) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 122.4997 40.64) (end 121.9451 41.1946) (width 0.254) (layer F.Cu) (net 2) (tstamp 562B3733))
+ (segment (start 121.9451 41.1946) (end 121.2297 41.91) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 121.2297 41.91) (end 115.0291 41.91) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 113.7591 40.64) (end 114.2749 41.1558) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 114.2749 41.1558) (end 115.0291 41.91) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 113.7591 40.64) (end 113.03 40.64) (width 0.254) (layer F.Cu) (net 2) (tstamp 562B3626))
+ (segment (start 137.795 59.056) (end 137.795 60.4123) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 134.62 64.516) (end 134.62 63.2711) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 134.62 63.2711) (end 137.4788 60.4123) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 137.4788 60.4123) (end 137.795 60.4123) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 156.21 44.4249) (end 159.512 47.7269) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 159.512 52) (end 159.512 56.662) (width 0.254) (layer F.Cu) (net 2) (tstamp 557C6419))
+ (segment (start 159.512 47.7269) (end 159.512 52) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 161.315 65.761) (end 161.29 65.786) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 161.29 65.786) (end 161.29 69.596) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 162.56 64.516) (end 161.315 65.761) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 144.6344 48.16) (end 144.7741 48.2997) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 144.7741 48.2997) (end 145.415 48.2997) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 144.78 41.8849) (end 144.78 48.0144) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 144.78 48.0144) (end 144.6344 48.16) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 145.415 49.656) (end 145.415 48.2997) (width 0.254) (layer F.Cu) (net 2))
+ (via (at 144.6344 48.16) (size 0.889) (layers F.Cu B.Cu) (net 2))
+ (segment (start 156.21 43.18) (end 156.21 44.4249) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 106.172 56.662) (end 103.2727 56.662) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 103.2727 56.662) (end 102.235 57.6997) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 92.075 57.1913) (end 101.7266 57.1913) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 101.7266 57.1913) (end 102.235 57.6997) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 92.075 54.5) (end 92.075 51.0123) (width 0.254) (layer F.Cu) (net 2) (tstamp 557C63B2))
+ (segment (start 92.075 57.1913) (end 92.075 54.5) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 102.235 59.056) (end 102.235 57.6997) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 109.855 48.2997) (end 114.3 43.8547) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 109.855 49.656) (end 109.855 48.2997) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 114.3 42.6391) (end 115.0291 41.91) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 114.3 43.8547) (end 114.3 42.6391) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 92.075 49.656) (end 92.075 51.0123) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 137.795 58.5049) (end 137.795 59.056) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 120.015 59.056) (end 120.015 57.6997) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 148.6535 40.5765) (end 149.987 41.91) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 149.987 41.91) (end 154.2109 41.91) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 154.2109 41.91) (end 154.95645 42.65555) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 154.95645 42.65555) (end 154.9651 42.6642) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B3806))
+ (segment (start 130.937 40.513) (end 132.334 41.91) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 132.334 41.91) (end 136.398 41.91) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 136.398 41.91) (end 136.4309 41.91) (width 0.254) (layer B.Cu) (net 2) (tstamp 562B37F1))
+ (segment (start 130.937 40.513) (end 131.064 40.386) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 130.81 40.64) (end 130.937 40.513) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 148.6535 40.5765) (end 148.717 40.513) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 148.59 40.64) (end 148.6535 40.5765) (width 0.254) (layer B.Cu) (net 2))
+ (via (at 136 55.25) (size 0.889) (layers F.Cu B.Cu) (net 2))
+ (segment (start 94.75 54.5) (end 95.5 55.25) (width 0.4064) (layer F.Cu) (net 2) (tstamp 557C63B4))
+ (via (at 95.5 55.25) (size 0.889) (layers F.Cu B.Cu) (net 2))
+ (segment (start 92.075 54.5) (end 94.75 54.5) (width 0.4064) (layer F.Cu) (net 2))
+ (via (at 120.75 54.75) (size 0.889) (layers F.Cu B.Cu) (net 2))
+ (via (at 160 52) (size 0.889) (layers F.Cu B.Cu) (net 2))
+ (segment (start 159.512 52) (end 160 52) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 118.703291 56.387991) (end 112.924863 56.387991) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 120.015 57.6997) (end 118.703291 56.387991) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 112.924863 56.387991) (end 112.920851 56.383979) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 112.920851 56.383979) (end 107.329021 56.383979) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 107.329021 56.383979) (end 107.051 56.662) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 107.051 56.662) (end 106.172 56.662) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 137.412 56.662) (end 136 55.25) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 141.732 56.662) (end 137.412 56.662) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 137.412 58.623) (end 137.795 59.006) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 137.412 56.662) (end 137.412 58.623) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 122.387991 56.387991) (end 122.55 56.55) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 118.703291 56.387991) (end 122.387991 56.387991) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 122.67885 56.67885) (end 122.55 56.55) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 122.55 56.55) (end 120.75 54.75) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 122.90375 56.67885) (end 122.67885 56.67885) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 122.9206 56.662) (end 122.90375 56.67885) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 123.952 56.662) (end 122.9206 56.662) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 159.512 56.9745) (end 160.66921 58.13171) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 160.66921 58.13171) (end 160.66921 59.91921) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 162.56 61.81) (end 162.56 64.516) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 155.575 60.4123) (end 161.0877 60.4123) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 155.575 59.056) (end 155.575 60.4123) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 160.66921 59.91921) (end 161.125 60.375) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 161.0877 60.4123) (end 161.125 60.375) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 161.125 60.375) (end 162.56 61.81) (width 0.4064) (layer F.Cu) (net 2))
+ (segment (start 111.76805 43.67995) (end 118.443621 50.355521) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 125.15491 50.3507) (end 143.681383 50.3507) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 118.443621 50.355521) (end 125.150089 50.355521) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 143.681383 50.3507) (end 144.31 50.3507) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 125.150089 50.355521) (end 125.15491 50.3507) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 111.76805 43.67995) (end 111.2681 43.18) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 111.2681 43.18) (end 110.49 43.18) (width 0.254) (layer B.Cu) (net 3) (tstamp 562B37CB))
+ (segment (start 144.31 50.3507) (end 144.31 50.3996) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 111.7349 43.6468) (end 111.76805 43.67995) (width 0.254) (layer B.Cu) (net 3))
+ (via (at 144.31 50.3507) (size 0.889) (layers F.Cu B.Cu) (net 3))
+ (segment (start 144.754499 50.821463) (end 144.754499 50.795199) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 145.045046 51.11201) (end 144.754499 50.821463) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 145.784954 51.11201) (end 145.045046 51.11201) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 146.31429 50.582674) (end 145.784954 51.11201) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 146.31429 50.07671) (end 146.31429 50.582674) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 146.685 49.706) (end 146.31429 50.07671) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 144.754499 50.795199) (end 144.31 50.3507) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 125.066665 49.847511) (end 118.745011 49.847511) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 143.968 49.4761) (end 143.8768 49.5673) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 143.8768 49.5673) (end 125.346876 49.5673) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 114.2749 45.3774) (end 114.2749 44.4249) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 113.893599 44.043599) (end 113.03 43.18) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 114.2749 44.4249) (end 113.893599 44.043599) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 147.6999 49.4761) (end 143.968 49.4761) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 149.225 47.951) (end 147.6999 49.4761) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 118.745011 49.847511) (end 114.2749 45.3774) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 125.346876 49.5673) (end 125.066665 49.847511) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 149.225 49.656) (end 149.225 47.951) (width 0.254) (layer F.Cu) (net 4))
+ (via (at 149.225 47.951) (size 0.889) (layers F.Cu B.Cu) (net 4))
+ (segment (start 114.95485 44.46985) (end 115.57 43.8547) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 115.57 43.8547) (end 115.57 43.18) (width 0.254) (layer F.Cu) (net 5) (tstamp 562B3755))
+ (segment (start 114.9998 44.4249) (end 114.95485 44.46985) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 118.745 49.656) (end 118.745 51.0123) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 117.475 49.656) (end 117.475 51.0123) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 117.93799 51.11201) (end 118.0377 51.0123) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 112.025046 51.11201) (end 117.93799 51.11201) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 111.925336 51.0123) (end 112.025046 51.11201) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 111.125 48.2997) (end 111.125 51.0123) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 114.95485 44.46985) (end 111.125 48.2997) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 118.0377 51.0123) (end 118.745 51.0123) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 111.125 51.0123) (end 111.925336 51.0123) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 117.475 51.0123) (end 118.0377 51.0123) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 124.856241 49.339501) (end 125.136842 49.0589) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 142.825901 47.776599) (end 143.2704 47.3321) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 116.84 41.91) (end 116.84 46.99) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 141.5436 49.0589) (end 142.825901 47.776599) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 119.189501 49.339501) (end 124.856241 49.339501) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 115.57 40.64) (end 116.84 41.91) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 116.84 46.99) (end 119.189501 49.339501) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 125.136842 49.0589) (end 141.5436 49.0589) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 147.955 48.2997) (end 146.9874 47.3321) (width 0.254) (layer F.Cu) (net 6))
+ (segment (start 146.9874 47.3321) (end 143.2704 47.3321) (width 0.254) (layer F.Cu) (net 6))
+ (segment (start 147.955 49.656) (end 147.955 48.2997) (width 0.254) (layer F.Cu) (net 6))
+ (via (at 143.2704 47.3321) (size 0.889) (layers F.Cu B.Cu) (net 6))
+ (segment (start 151.765 48.2997) (end 153.67 46.3947) (width 0.254) (layer F.Cu) (net 7))
+ (segment (start 153.67 46.3947) (end 153.67 44.4249) (width 0.254) (layer F.Cu) (net 7))
+ (segment (start 153.67 43.18) (end 153.67 44.4249) (width 0.254) (layer F.Cu) (net 7))
+ (segment (start 151.765 49.656) (end 151.765 48.2997) (width 0.254) (layer F.Cu) (net 7))
+ (segment (start 134.6239 43.6919) (end 135.1358 43.18) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 135.1358 43.18) (end 135.89 43.18) (width 0.254) (layer F.Cu) (net 8) (tstamp 562B36D2))
+ (segment (start 134.6239 43.6919) (end 134.6451 43.6707) (width 0.254) (layer F.Cu) (net 8) (tstamp 562B36D0))
+ (segment (start 130.045078 45.7581) (end 132.5577 45.7581) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 94.615 50.331) (end 97.4132 53.1292) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 126.953992 48.495008) (end 127.887488 47.561512) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 126.953992 49.397058) (end 126.953992 48.495008) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 127.887488 47.561512) (end 128.241667 47.561511) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 123.169008 53.182042) (end 126.953992 49.397058) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 111.221334 53.182042) (end 123.169008 53.182042) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 97.4132 53.1292) (end 111.168492 53.1292) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 111.168492 53.1292) (end 111.221334 53.182042) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 132.5577 45.7581) (end 134.6239 43.6919) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 128.241667 47.561511) (end 130.045078 45.7581) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 94.615 49.656) (end 94.615 50.331) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 123.19 42.4509) (end 122.6742 41.9351) (width 0.254) (layer B.Cu) (net 9))
+ (via (at 94.208 45.5943) (size 0.889) (layers F.Cu B.Cu) (net 9))
+ (segment (start 93.345 46.4573) (end 94.208 45.5943) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 93.345 46.4573) (end 93.345 49.656) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 121.9198 41.1807) (end 122.6742 41.9351) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 121.9198 40.1453) (end 121.9198 41.1807) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 121.1695 39.395) (end 121.9198 40.1453) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 100.4073 39.395) (end 121.1695 39.395) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 94.208 45.5943) (end 100.4073 39.395) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 123.19 42.4509) (end 123.19 43.18) (width 0.254) (layer B.Cu) (net 9) (tstamp 562B3797))
+ (segment (start 121.23795 41.95705) (end 120.65 41.3691) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 120.65 41.3691) (end 120.65 40.64) (width 0.254) (layer B.Cu) (net 10) (tstamp 562B3792))
+ (segment (start 118.6075 39.3756) (end 119.3856 39.3756) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 102.235 49.656) (end 102.235 44.912) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 100.603 43.28) (end 102.235 44.912) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 100.603 40.9164) (end 100.603 43.28) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 102.1438 39.3756) (end 100.603 40.9164) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 118.6075 39.3756) (end 102.1438 39.3756) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 119.3856 39.3756) (end 120.65 40.64) (width 0.254) (layer F.Cu) (net 10) (tstamp 562B3727))
+ (segment (start 120.15005 40.14005) (end 120.65 40.64) (width 0.254) (layer F.Cu) (net 10) (tstamp 562B3615))
+ (segment (start 104.314 46.736) (end 103.632 46.736) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 103.632 46.736) (end 102.235 48.133) (width 0.254) (layer F.Cu) (net 10) (tstamp 55B70264))
+ (segment (start 102.235 48.133) (end 102.235 49.656) (width 0.254) (layer F.Cu) (net 10) (tstamp 55B70265))
+ (via (at 139.9739 48.2325) (size 0.889) (layers F.Cu B.Cu) (net 10))
+ (segment (start 136.3189 44.5775) (end 139.9739 48.2325) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 122.7889 44.5775) (end 136.3189 44.5775) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 121.92 43.7086) (end 122.7889 44.5775) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 121.92 42.6391) (end 121.92 43.7086) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 121.1658 41.8849) (end 121.23795 41.95705) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 121.23795 41.95705) (end 121.92 42.6391) (width 0.254) (layer B.Cu) (net 10) (tstamp 562B3790))
+ (segment (start 137.795 48.2997) (end 139.9067 48.2997) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 139.9067 48.2997) (end 139.9739 48.2325) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 137.795 49.656) (end 137.795 48.2997) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 155.575 51.0123) (end 155.575 49.656) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 139.9739 48.2325) (end 143.869431 52.128031) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 154.5266 52.0607) (end 155.575 51.0123) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 143.869431 52.128031) (end 147.158841 52.128031) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 147.158841 52.128031) (end 147.226172 52.0607) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 147.226172 52.0607) (end 154.5266 52.0607) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 137.1851 40.64) (end 137.1851 40.1242) (width 0.254) (layer F.Cu) (net 11))
+ (segment (start 137.1851 40.1242) (end 134.9112 37.8503) (width 0.254) (layer F.Cu) (net 11))
+ (segment (start 134.9112 37.8503) (end 101.4178 37.8503) (width 0.254) (layer F.Cu) (net 11))
+ (segment (start 101.4178 37.8503) (end 95.885 43.3831) (width 0.254) (layer F.Cu) (net 11))
+ (segment (start 95.885 43.3831) (end 95.885 49.656) (width 0.254) (layer F.Cu) (net 11))
+ (segment (start 138.43 40.64) (end 137.1851 40.64) (width 0.254) (layer F.Cu) (net 11))
+ (segment (start 134.6451 40.64) (end 134.6451 40.1242) (width 0.254) (layer F.Cu) (net 12))
+ (segment (start 134.6451 40.1242) (end 132.8797 38.3588) (width 0.254) (layer F.Cu) (net 12))
+ (segment (start 132.8797 38.3588) (end 101.6403 38.3588) (width 0.254) (layer F.Cu) (net 12))
+ (segment (start 101.6403 38.3588) (end 98.425 41.5741) (width 0.254) (layer F.Cu) (net 12))
+ (segment (start 98.425 41.5741) (end 98.425 48.2997) (width 0.254) (layer F.Cu) (net 12))
+ (segment (start 135.89 40.64) (end 134.6451 40.64) (width 0.254) (layer F.Cu) (net 12))
+ (segment (start 98.425 49.656) (end 98.425 48.2997) (width 0.254) (layer F.Cu) (net 12))
+ (segment (start 97.155 50.331) (end 99.4448 52.6208) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 99.4448 52.6208) (end 111.378528 52.6208) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 129.835042 45.2497) (end 131.2803 45.2497) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 132.486401 44.043599) (end 133.35 43.18) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 122.996573 52.636041) (end 126.445981 49.186633) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 131.2803 45.2497) (end 132.486401 44.043599) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 127.527935 47.053501) (end 128.031241 47.053501) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 111.378528 52.6208) (end 111.393769 52.636041) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 97.155 49.656) (end 97.155 50.331) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 111.393769 52.636041) (end 122.996573 52.636041) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 128.031241 47.053501) (end 129.835042 45.2497) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 126.445981 48.135455) (end 127.527935 47.053501) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 126.445981 49.186633) (end 126.445981 48.135455) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 126.7587 44.6611) (end 124.747311 46.672489) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 116.8863 48.2997) (end 116.205 48.981) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 132.82555 41.89355) (end 132.0978 42.6213) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 131.1398 44.6611) (end 126.7587 44.6611) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 122.353124 48.2997) (end 116.8863 48.2997) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 132.0978 43.7031) (end 131.1398 44.6611) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 123.980335 46.672489) (end 122.353124 48.2997) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 132.0978 42.6213) (end 132.0978 43.7031) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 124.747311 46.672489) (end 123.980335 46.672489) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 116.205 48.981) (end 116.205 49.656) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 132.82555 41.89355) (end 133.35 41.3691) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 133.35 41.3691) (end 133.35 40.64) (width 0.254) (layer F.Cu) (net 14) (tstamp 562B3656))
+ (segment (start 132.8342 41.8849) (end 132.82555 41.89355) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 123.76991 46.16448) (end 122.14299 47.7914) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 114.935 48.981) (end 114.935 49.656) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 122.14299 47.7914) (end 116.1246 47.7914) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 127 43.6705) (end 124.506021 46.164479) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 116.1246 47.7914) (end 114.935 48.981) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 127 41.91) (end 127 43.6705) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 128.27 40.64) (end 127 41.91) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 124.506021 46.164479) (end 123.76991 46.16448) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 130.81 42.4509) (end 130.2942 41.9351) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 99.695 41.0231) (end 99.695 49.656) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 101.8509 38.8672) (end 99.695 41.0231) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 128.3036 38.8672) (end 101.8509 38.8672) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 129.54 40.1036) (end 128.3036 38.8672) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 129.54 41.1809) (end 129.54 40.1036) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 130.28555 41.92645) (end 129.54 41.1809) (width 0.254) (layer F.Cu) (net 16) (tstamp 562B3643))
+ (segment (start 130.2942 41.9351) (end 130.28555 41.92645) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 130.81 42.4509) (end 130.81 43.18) (width 0.254) (layer F.Cu) (net 16) (tstamp 562B36BA))
+ (segment (start 130.81 42.4509) (end 130.81 43.18) (width 0.254) (layer F.Cu) (net 16) (tstamp 562B3645))
+ (segment (start 125.990383 45.212) (end 122.682 45.212) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 122.682 45.212) (end 120.65 43.18) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 127.635 46.228) (end 127.006383 46.228) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 127.006383 46.228) (end 125.990383 45.212) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 127.635 46.228) (end 135.0283 46.228) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 135.0283 46.228) (end 136.525 47.7247) (width 0.254) (layer B.Cu) (net 17))
+ (via (at 127.635 46.228) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 17))
+ (segment (start 121.285 43.815) (end 120.65 43.18) (width 0.254) (layer B.Cu) (net 17) (tstamp 562B359C))
+ (segment (start 136.525 48.2997) (end 136.525 47.7247) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 136.525 49.656) (end 136.525 48.2997) (width 0.254) (layer F.Cu) (net 17))
+ (via (at 136.525 47.7247) (size 0.889) (layers F.Cu B.Cu) (net 17))
+ (segment (start 154.305 51.0123) (end 154.305 49.656) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 144.396921 51.620021) (end 146.948415 51.620021) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 136.525 47.7247) (end 136.969499 47.280201) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 136.969499 47.280201) (end 140.191801 47.280201) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 153.7967 51.5206) (end 154.305 51.0123) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 147.047836 51.5206) (end 153.7967 51.5206) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 140.191801 47.280201) (end 143.4842 50.5726) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 146.948415 51.620021) (end 147.047836 51.5206) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 143.4842 50.5726) (end 143.4842 50.7073) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 143.4842 50.7073) (end 144.396921 51.620021) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 127.190501 46.672499) (end 127.635 46.228) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 100.965 49.656) (end 100.965 50.331) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 102.7453 52.1113) (end 111.587464 52.1113) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 125.93797 48.976208) (end 125.93797 47.92503) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 122.786147 52.128031) (end 125.93797 48.976208) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 111.604195 52.128031) (end 122.786147 52.128031) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 111.587464 52.1113) (end 111.604195 52.128031) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 100.965 50.331) (end 102.7453 52.1113) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 125.93797 47.92503) (end 127.190501 46.672499) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 124.452 41.14) (end 124.952 40.64) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 124.952 40.64) (end 125.73 40.64) (width 0.254) (layer F.Cu) (net 18) (tstamp 562B3639))
+ (segment (start 116.263334 44.45) (end 121.2213 44.45) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 121.2213 44.45) (end 121.92 43.7513) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 114.6227 46.072) (end 114.641334 46.072) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 114.641334 46.072) (end 116.263334 44.45) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 124.4851 41.1069) (end 124.452 41.14) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 124.452 41.14) (end 123.7071 41.8849) (width 0.254) (layer F.Cu) (net 18) (tstamp 562B3637))
+ (segment (start 123.7071 41.8849) (end 122.6637 41.8849) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 122.6637 41.8849) (end 121.92 42.6286) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 121.92 42.6286) (end 121.92 43.7513) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 114.6227 46.072) (end 112.395 48.2997) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 112.395 49.656) (end 112.395 48.2997) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 121.666 47.244) (end 124.866401 44.043599) (width 0.254) (layer F.Cu) (net 19))
+ (segment (start 113.665 48.981) (end 115.402 47.244) (width 0.254) (layer F.Cu) (net 19))
+ (segment (start 124.866401 44.043599) (end 125.73 43.18) (width 0.254) (layer F.Cu) (net 19))
+ (segment (start 113.665 49.656) (end 113.665 48.981) (width 0.254) (layer F.Cu) (net 19))
+ (segment (start 115.402 47.244) (end 121.666 47.244) (width 0.254) (layer F.Cu) (net 19))
+ (segment (start 142.7809 43.18) (end 141.4222 44.5387) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 128.905 48.2997) (end 128.905 49.656) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 134.5212 44.5387) (end 141.4222 44.5387) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 132.7934 46.2665) (end 134.5212 44.5387) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 130.9382 46.2665) (end 132.7934 46.2665) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 128.905 48.2997) (end 130.9382 46.2665) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 142.7809 43.18) (end 143.51 43.18) (width 0.254) (layer F.Cu) (net 20) (tstamp 562B369E))
+ (segment (start 131.445 48.2997) (end 132.0277 47.717) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 132.0277 47.717) (end 133.2553 47.717) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 133.2553 47.717) (end 135.4169 45.5554) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 135.4169 45.5554) (end 142.4323 45.5554) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 142.4323 45.5554) (end 142.7505 45.2372) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 142.7505 45.2372) (end 143.9928 45.2372) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 143.9928 45.2372) (end 146.05 43.18) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 131.445 49.656) (end 131.445 48.2997) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 146.05 41.3691) (end 145.5342 41.8849) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 130.175 48.2997) (end 130.175 49.656) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 144.78 42.6391) (end 145.5342 41.8849) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 144.78 43.709) (end 144.78 42.6391) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 143.7601 44.7289) (end 144.78 43.709) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 142.54 44.7289) (end 143.7601 44.7289) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 142.2218 45.0471) (end 142.54 44.7289) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 135.2064 45.0471) (end 142.2218 45.0471) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 133.0448 47.2087) (end 135.2064 45.0471) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 131.266 47.2087) (end 133.0448 47.2087) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 130.175 48.2997) (end 131.266 47.2087) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 146.05 41.3691) (end 146.05 40.64) (width 0.254) (layer F.Cu) (net 22) (tstamp 562B368E))
+ (segment (start 145.2526 45.7455) (end 146.0245 45.7455) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 145.2526 45.7455) (end 142.961 45.7455) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 142.961 45.7455) (end 142.6428 46.0637) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 142.6428 46.0637) (end 135.6274 46.0637) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 135.6274 46.0637) (end 133.3914 48.2997) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 133.3914 48.2997) (end 132.715 48.2997) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 132.715 49.656) (end 132.715 48.2997) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 146.0245 45.7455) (end 148.59 43.18) (width 0.254) (layer F.Cu) (net 23) (tstamp 562B36F8))
+ (segment (start 147.32 46.2538) (end 148.0562 46.2538) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 148.0562 46.2538) (end 151.13 43.18) (width 0.254) (layer F.Cu) (net 24) (tstamp 562B3707))
+ (segment (start 136.2634 46.7621) (end 133.985 49.0405) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 142.6632 46.7621) (end 136.2634 46.7621) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 143.1715 46.2538) (end 142.6632 46.7621) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 147.3271 46.2538) (end 147.32 46.2538) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 147.32 46.2538) (end 143.1715 46.2538) (width 0.254) (layer F.Cu) (net 24) (tstamp 562B3705))
+ (segment (start 133.985 49.0405) (end 133.985 49.656) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 151.62995 41.91805) (end 151.13 41.4181) (width 0.254) (layer F.Cu) (net 25))
+ (segment (start 151.13 41.4181) (end 151.13 40.64) (width 0.254) (layer F.Cu) (net 25) (tstamp 562B367A))
+ (segment (start 151.5968 41.8849) (end 151.62995 41.91805) (width 0.254) (layer F.Cu) (net 25))
+ (segment (start 151.62995 41.91805) (end 152.4 42.6881) (width 0.254) (layer F.Cu) (net 25) (tstamp 562B3678))
+ (segment (start 152.4 42.6881) (end 152.4 45.7449) (width 0.254) (layer F.Cu) (net 25))
+ (segment (start 152.4 45.7449) (end 150.495 47.6499) (width 0.254) (layer F.Cu) (net 25))
+ (segment (start 150.495 47.6499) (end 150.495 49.656) (width 0.254) (layer F.Cu) (net 25))
+ (segment (start 153.67 40.64) (end 154.3991 40.64) (width 0.254) (layer B.Cu) (net 26))
+ (segment (start 154.3991 40.64) (end 154.9149 41.1558) (width 0.254) (layer B.Cu) (net 26) (tstamp 562B380D))
+ (segment (start 138.2306 51.3407) (end 138.3317 51.4418) (width 0.254) (layer B.Cu) (net 26))
+ (segment (start 138.3317 51.4418) (end 149.7275 51.4418) (width 0.254) (layer B.Cu) (net 26))
+ (segment (start 149.7275 51.4418) (end 157.5074 43.6619) (width 0.254) (layer B.Cu) (net 26))
+ (segment (start 157.5074 43.6619) (end 157.5074 42.7063) (width 0.254) (layer B.Cu) (net 26))
+ (segment (start 157.5074 42.7063) (end 156.7361 41.935) (width 0.254) (layer B.Cu) (net 26))
+ (segment (start 156.7361 41.935) (end 155.6941 41.935) (width 0.254) (layer B.Cu) (net 26))
+ (segment (start 155.6941 41.935) (end 154.9149 41.1558) (width 0.254) (layer B.Cu) (net 26))
+ (via (at 138.2306 51.45) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 26))
+ (segment (start 135.255 50.831) (end 135.255 49.706) (width 0.4064) (layer F.Cu) (net 26))
+ (segment (start 135.874 51.45) (end 135.255 50.831) (width 0.4064) (layer F.Cu) (net 26))
+ (segment (start 138.2306 51.45) (end 135.874 51.45) (width 0.4064) (layer F.Cu) (net 26))
+ (segment (start 155.68555 41.89355) (end 156.21 41.3691) (width 0.254) (layer F.Cu) (net 27))
+ (segment (start 156.21 41.3691) (end 156.21 40.64) (width 0.254) (layer F.Cu) (net 27) (tstamp 562B3682))
+ (segment (start 155.6942 41.8849) (end 155.68555 41.89355) (width 0.254) (layer F.Cu) (net 27))
+ (segment (start 155.68555 41.89355) (end 154.9401 42.639) (width 0.254) (layer F.Cu) (net 27) (tstamp 562B3680))
+ (segment (start 154.9401 42.639) (end 154.9401 46.3946) (width 0.254) (layer F.Cu) (net 27))
+ (segment (start 154.9401 46.3946) (end 153.035 48.2997) (width 0.254) (layer F.Cu) (net 27))
+ (segment (start 153.035 49.656) (end 153.035 48.2997) (width 0.254) (layer F.Cu) (net 27))
+ (segment (start 88.9 67.056) (end 88.9 65.8111) (width 0.254) (layer F.Cu) (net 28))
+ (segment (start 93.345 59.056) (end 93.345 60.4123) (width 0.254) (layer F.Cu) (net 28))
+ (segment (start 93.345 60.4123) (end 90.1449 63.6124) (width 0.254) (layer F.Cu) (net 28))
+ (segment (start 90.1449 63.6124) (end 90.1449 65.0331) (width 0.254) (layer F.Cu) (net 28))
+ (segment (start 90.1449 65.0331) (end 89.3669 65.8111) (width 0.254) (layer F.Cu) (net 28))
+ (segment (start 89.3669 65.8111) (end 88.9 65.8111) (width 0.254) (layer F.Cu) (net 28))
+ (segment (start 88.9 64.516) (end 88.9 63.2711) (width 0.254) (layer F.Cu) (net 29))
+ (segment (start 92.075 59.056) (end 92.075 60.4123) (width 0.254) (layer F.Cu) (net 29))
+ (segment (start 92.075 60.4123) (end 89.2162 63.2711) (width 0.254) (layer F.Cu) (net 29))
+ (segment (start 89.2162 63.2711) (end 88.9 63.2711) (width 0.254) (layer F.Cu) (net 29))
+ (segment (start 91.44 67.056) (end 91.44 65.8111) (width 0.254) (layer F.Cu) (net 30))
+ (segment (start 94.615 59.056) (end 94.615 60.4123) (width 0.254) (layer F.Cu) (net 30))
+ (segment (start 94.615 60.4123) (end 92.71 62.3173) (width 0.254) (layer F.Cu) (net 30))
+ (segment (start 92.71 62.3173) (end 92.71 65.0569) (width 0.254) (layer F.Cu) (net 30))
+ (segment (start 92.71 65.0569) (end 91.9558 65.8111) (width 0.254) (layer F.Cu) (net 30))
+ (segment (start 91.9558 65.8111) (end 91.44 65.8111) (width 0.254) (layer F.Cu) (net 30))
+ (segment (start 97.155 60.4123) (end 97.155 60.285) (width 0.254) (layer F.Cu) (net 31))
+ (segment (start 95.224601 62.342699) (end 97.155 60.4123) (width 0.254) (layer F.Cu) (net 31))
+ (segment (start 95.224601 65.092965) (end 95.224601 62.342699) (width 0.254) (layer F.Cu) (net 31))
+ (segment (start 93.98 66.337566) (end 95.224601 65.092965) (width 0.254) (layer F.Cu) (net 31))
+ (segment (start 93.98 67.056) (end 93.98 66.337566) (width 0.254) (layer F.Cu) (net 31))
+ (segment (start 97.155 60.285) (end 97.155 59.056) (width 0.254) (layer F.Cu) (net 31))
+ (segment (start 95.885 59.056) (end 95.885 60.6235) (width 0.254) (layer F.Cu) (net 32))
+ (segment (start 95.885 60.6235) (end 93.98 62.5285) (width 0.254) (layer F.Cu) (net 32))
+ (segment (start 93.98 62.5285) (end 93.98 64.516) (width 0.254) (layer F.Cu) (net 32))
+ (segment (start 96.52 67.056) (end 96.52 65.8111) (width 0.254) (layer F.Cu) (net 33))
+ (segment (start 98.425 59.056) (end 98.425 61.461) (width 0.254) (layer F.Cu) (net 33))
+ (segment (start 98.425 61.461) (end 97.79 62.096) (width 0.254) (layer F.Cu) (net 33))
+ (segment (start 97.79 62.096) (end 97.79 65.0569) (width 0.254) (layer F.Cu) (net 33))
+ (segment (start 97.79 65.0569) (end 97.0358 65.8111) (width 0.254) (layer F.Cu) (net 33))
+ (segment (start 97.0358 65.8111) (end 96.52 65.8111) (width 0.254) (layer F.Cu) (net 33))
+ (segment (start 123.126499 70.929501) (end 126.136401 67.919599) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 115.675101 70.929501) (end 123.126499 70.929501) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 131.348601 70.675501) (end 128.25355 67.58045) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 126.136401 67.919599) (end 127 67.056) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 154.94 67.056) (end 151.320499 70.675501) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 111.52 66.7744) (end 115.675101 70.929501) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 151.320499 70.675501) (end 131.348601 70.675501) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 100.37705 67.64395) (end 99.7891 67.056) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 99.7891 67.056) (end 99.06 67.056) (width 0.254) (layer B.Cu) (net 34) (tstamp 562B38D7))
+ (segment (start 128.25355 67.58045) (end 127.7291 67.056) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 127.7291 67.056) (end 127 67.056) (width 0.254) (layer B.Cu) (net 34) (tstamp 562B388A))
+ (segment (start 112.395 59.056) (end 112.395 65.8994) (width 0.254) (layer F.Cu) (net 34))
+ (segment (start 112.395 65.8994) (end 111.52 66.7744) (width 0.254) (layer F.Cu) (net 34))
+ (segment (start 128.25355 67.58045) (end 128.2449 67.5718) (width 0.254) (layer B.Cu) (net 34) (tstamp 562B3888))
+ (segment (start 111.52 66.7744) (end 108.1767 70.1177) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 108.1767 70.1177) (end 102.8508 70.1177) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 102.8508 70.1177) (end 100.37705 67.64395) (width 0.254) (layer B.Cu) (net 34))
+ (segment (start 100.37705 67.64395) (end 100.3049 67.5718) (width 0.254) (layer B.Cu) (net 34) (tstamp 562B38D5))
+ (via (at 111.52 66.7744) (size 0.889) (layers F.Cu B.Cu) (net 34))
+ (segment (start 100.266499 63.944499) (end 100.31355 63.99155) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 101.267248 61.21401) (end 100.266499 62.214759) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 104.888458 60.7678) (end 104.442248 61.21401) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 111.221 60.7678) (end 104.888458 60.7678) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 100.266499 62.214759) (end 100.266499 63.944499) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 104.442248 61.21401) (end 101.267248 61.21401) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 100.31355 63.99155) (end 99.7891 64.516) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 99.7891 64.516) (end 99.06 64.516) (width 0.254) (layer B.Cu) (net 35) (tstamp 562B38CE))
+ (segment (start 154.1619 64.516) (end 153.6951 64.0492) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 116.9926 61.0842) (end 116.7401 61.3367) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 118.3256 61.0842) (end 116.9926 61.0842) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 118.7804 61.539) (end 118.3256 61.0842) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 151.1849 61.539) (end 118.7804 61.539) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 153.6951 64.0492) (end 151.1849 61.539) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 154.1619 64.516) (end 154.94 64.516) (width 0.254) (layer B.Cu) (net 35) (tstamp 562B3896))
+ (segment (start 116.7401 61.3367) (end 116.7401 61.9857) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 125.7462 63.2622) (end 127 64.516) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 118.0166 63.2622) (end 125.7462 63.2622) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 116.7401 61.9857) (end 118.0166 63.2622) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 116.7401 61.3367) (end 116.1712 60.7678) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 116.1712 60.7678) (end 111.221 60.7678) (width 0.254) (layer B.Cu) (net 35))
+ (segment (start 111.125 59.056) (end 111.125 60.4123) (width 0.254) (layer F.Cu) (net 35))
+ (segment (start 111.125 60.4123) (end 111.221 60.5083) (width 0.254) (layer F.Cu) (net 35))
+ (segment (start 111.221 60.5083) (end 111.221 60.7678) (width 0.254) (layer F.Cu) (net 35))
+ (segment (start 100.31355 63.99155) (end 100.3049 64.0002) (width 0.254) (layer B.Cu) (net 35) (tstamp 562B38CC))
+ (via (at 111.221 60.7678) (size 0.889) (layers F.Cu B.Cu) (net 35))
+ (segment (start 129.54 68.3009) (end 128.24491 69.59599) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 129.54 68.3009) (end 130.047711 68.808611) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 115.572511 68.808611) (end 113.1145 66.3506) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 128.24491 69.59599) (end 119.32704 69.59599) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 119.32704 69.59599) (end 118.539661 68.808611) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 118.539661 68.808611) (end 115.572511 68.808611) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 155.7268 68.8092) (end 156.616401 67.919599) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 156.616401 67.919599) (end 157.48 67.056) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 151.592167 68.808611) (end 151.592756 68.8092) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 130.047711 68.808611) (end 151.592167 68.808611) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 151.592756 68.8092) (end 155.7268 68.8092) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 113.1145 66.3506) (end 111.157 68.3081) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 111.157 68.3081) (end 102.8521 68.3081) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 102.8521 68.3081) (end 101.6 67.056) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 113.665 59.056) (end 113.665 65.8001) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 113.665 65.8001) (end 113.1145 66.3506) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 129.54 67.056) (end 129.54 68.3009) (width 0.254) (layer F.Cu) (net 36))
+ (segment (start 114.935 59.056) (end 114.935 58.381) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 114.935 67.4482) (end 114.935 60.285) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 126.73132 69.08798) (end 119.537464 69.08798) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 131.482591 68.300601) (end 153.005399 68.300601) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 114.935 60.285) (end 114.935 59.056) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 129.54 65.0855) (end 128.27 66.3555) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 128.27 67.5493) (end 126.73132 69.08798) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 128.27 66.3555) (end 128.27 67.5493) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 153.005399 68.300601) (end 153.67 67.636) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 118.750085 68.300601) (end 115.787401 68.300601) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 130.835399 67.653409) (end 131.482591 68.300601) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 119.537464 69.08798) (end 118.750085 68.300601) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 156.616401 65.379599) (end 157.48 64.516) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 153.67 67.636) (end 153.67 66.5638) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 154.4478 65.786) (end 156.21 65.786) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 130.835399 66.380899) (end 130.835399 67.653409) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 153.67 66.5638) (end 154.4478 65.786) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 156.21 65.786) (end 156.616401 65.379599) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 129.54 65.0855) (end 130.835399 66.380899) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 115.787401 68.300601) (end 114.935 67.4482) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 129.54 64.516) (end 129.54 65.0855) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 114.935 57.881) (end 114.935 59.006) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 114.654 57.6) (end 114.935 57.881) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 109.4795 57.6) (end 114.654 57.6) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 101.6 64.516) (end 103.250969 62.865031) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 103.250969 62.865031) (end 105.512012 62.865031) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 105.512012 62.865031) (end 107.5795 60.797543) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 107.5795 60.797543) (end 107.5795 59.5) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 107.5795 59.5) (end 109.4795 57.6) (width 0.254) (layer F.Cu) (net 37))
+ (segment (start 104.14 67.056) (end 102.8951 67.056) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 99.695 59.056) (end 99.695 62.8109) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 99.695 62.8109) (end 100.33 63.4459) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 100.33 63.4459) (end 100.33 65.0582) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 100.33 65.0582) (end 101.0829 65.8111) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 101.0829 65.8111) (end 102.166 65.8111) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 102.166 65.8111) (end 102.8951 66.5402) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 102.8951 66.5402) (end 102.8951 67.056) (width 0.254) (layer F.Cu) (net 38))
+ (segment (start 104.14 64.516) (end 105.3849 64.516) (width 0.254) (layer F.Cu) (net 39))
+ (segment (start 109.855 59.056) (end 109.855 60.4123) (width 0.254) (layer F.Cu) (net 39))
+ (segment (start 109.855 60.4123) (end 109.0218 60.4123) (width 0.254) (layer F.Cu) (net 39))
+ (segment (start 109.0218 60.4123) (end 105.3849 64.0492) (width 0.254) (layer F.Cu) (net 39))
+ (segment (start 105.3849 64.0492) (end 105.3849 64.516) (width 0.254) (layer F.Cu) (net 39))
+ (segment (start 101.600901 63.119901) (end 101.536499 63.055499) (width 0.254) (layer B.Cu) (net 40))
+ (segment (start 101.536499 63.055499) (end 101.092 62.611) (width 0.254) (layer B.Cu) (net 40))
+ (segment (start 107.496001 63.119901) (end 101.600901 63.119901) (width 0.254) (layer B.Cu) (net 40))
+ (segment (start 107.9405 63.5644) (end 107.496001 63.119901) (width 0.254) (layer B.Cu) (net 40))
+ (segment (start 101.092 62.611) (end 101.092 59.183) (width 0.254) (layer F.Cu) (net 40))
+ (segment (start 101.092 59.183) (end 100.965 59.056) (width 0.254) (layer F.Cu) (net 40))
+ (via (at 101.092 62.611) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 40))
+ (segment (start 100.965 59.056) (end 100.965 59.731) (width 0.254) (layer F.Cu) (net 40))
+ (segment (start 106.68 65.8111) (end 107.1955 65.8111) (width 0.254) (layer F.Cu) (net 40))
+ (segment (start 107.1955 65.8111) (end 107.9405 65.0661) (width 0.254) (layer F.Cu) (net 40))
+ (segment (start 107.9405 65.0661) (end 107.9405 63.5644) (width 0.254) (layer F.Cu) (net 40))
+ (segment (start 106.68 67.056) (end 106.68 65.8111) (width 0.254) (layer F.Cu) (net 40))
+ (via (at 107.9405 63.5644) (size 0.889) (layers F.Cu B.Cu) (net 40))
+ (segment (start 116.84 65.8111) (end 117.3069 65.8111) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 117.3069 65.8111) (end 118.0849 65.0331) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 118.0849 65.0331) (end 118.0849 64.0444) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 118.0849 64.0444) (end 121.2087 60.9206) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 121.2087 60.9206) (end 125.8098 60.9206) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 125.8098 60.9206) (end 126.3181 60.4123) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 126.3181 60.4123) (end 128.905 60.4123) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 128.905 59.056) (end 128.905 60.4123) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 116.84 67.056) (end 116.84 65.8111) (width 0.254) (layer F.Cu) (net 41))
+ (segment (start 116.84 64.516) (end 120.9437 60.4123) (width 0.254) (layer F.Cu) (net 42))
+ (segment (start 120.9437 60.4123) (end 125.3454 60.4123) (width 0.254) (layer F.Cu) (net 42))
+ (segment (start 125.3454 60.4123) (end 126.7017 59.056) (width 0.254) (layer F.Cu) (net 42))
+ (segment (start 126.7017 59.056) (end 127.635 59.056) (width 0.254) (layer F.Cu) (net 42))
+ (segment (start 130.175 60.4123) (end 129.6667 60.9206) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 129.6667 60.9206) (end 126.5287 60.9206) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 126.5287 60.9206) (end 126.0204 61.4289) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 126.0204 61.4289) (end 123.2339 61.4289) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 123.2339 61.4289) (end 120.65 64.0128) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 120.65 64.0128) (end 120.65 65.0569) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 120.65 65.0569) (end 119.8958 65.8111) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 119.8958 65.8111) (end 119.38 65.8111) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 119.38 67.056) (end 119.38 65.8111) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 130.175 59.056) (end 130.175 60.4123) (width 0.254) (layer F.Cu) (net 43))
+ (segment (start 132.715 60.4123) (end 130.9359 62.1914) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 130.9359 62.1914) (end 127.5219 62.1914) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 127.5219 62.1914) (end 125.73 63.9833) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 125.73 63.9833) (end 125.73 65.0082) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 125.73 65.0082) (end 124.9522 65.786) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 124.9522 65.786) (end 123.9191 65.786) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 123.9191 65.786) (end 123.1649 66.5402) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 123.1649 66.5402) (end 123.1649 67.056) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 121.92 67.056) (end 123.1649 67.056) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 132.715 59.056) (end 132.715 60.4123) (width 0.254) (layer F.Cu) (net 44))
+ (segment (start 131.445 60.4123) (end 130.1742 61.6831) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 130.1742 61.6831) (end 126.8982 61.6831) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 126.8982 61.6831) (end 125.3102 63.2711) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 125.3102 63.2711) (end 123.9429 63.2711) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 123.9429 63.2711) (end 123.1649 64.0491) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 123.1649 64.0491) (end 123.1649 64.516) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 131.445 59.056) (end 131.445 60.4123) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 121.92 64.516) (end 123.1649 64.516) (width 0.254) (layer F.Cu) (net 45))
+ (segment (start 133.985 60.4123) (end 131.6725 62.7248) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 131.6725 62.7248) (end 129.5613 62.7248) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 129.5613 62.7248) (end 128.27 64.0161) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 128.27 64.0161) (end 128.27 65.0082) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 128.27 65.0082) (end 127.4922 65.786) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 127.4922 65.786) (end 126.4591 65.786) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 126.4591 65.786) (end 125.7049 66.5402) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 125.7049 66.5402) (end 125.7049 67.056) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 124.46 67.056) (end 125.7049 67.056) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 133.985 59.056) (end 133.985 60.4123) (width 0.254) (layer F.Cu) (net 46))
+ (segment (start 132.08 67.056) (end 132.08 65.8111) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 135.255 59.056) (end 135.255 60.4123) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 135.255 60.4123) (end 132.4091 63.2582) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 132.4091 63.2582) (end 131.4966 63.2582) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 131.4966 63.2582) (end 130.81 63.9448) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 130.81 63.9448) (end 130.81 65.0569) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 130.81 65.0569) (end 131.5642 65.8111) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 131.5642 65.8111) (end 132.08 65.8111) (width 0.254) (layer F.Cu) (net 47))
+ (segment (start 130.82645 63.99155) (end 131.3509 64.516) (width 0.254) (layer B.Cu) (net 48))
+ (segment (start 131.3509 64.516) (end 132.08 64.516) (width 0.254) (layer B.Cu) (net 48) (tstamp 562B3877))
+ (segment (start 116.205 59.056) (end 116.205 60.4123) (width 0.254) (layer F.Cu) (net 48))
+ (segment (start 116.205 60.4123) (end 116.3718 60.4123) (width 0.254) (layer F.Cu) (net 48))
+ (segment (start 116.3718 60.4123) (end 117.8849 61.9254) (width 0.254) (layer F.Cu) (net 48))
+ (segment (start 130.8351 64.0002) (end 130.82645 63.99155) (width 0.254) (layer B.Cu) (net 48))
+ (segment (start 130.82645 63.99155) (end 128.9353 62.1004) (width 0.254) (layer B.Cu) (net 48) (tstamp 562B3875))
+ (segment (start 128.9353 62.1004) (end 118.0599 62.1004) (width 0.254) (layer B.Cu) (net 48))
+ (segment (start 118.0599 62.1004) (end 117.8849 61.9254) (width 0.254) (layer B.Cu) (net 48))
+ (via (at 117.8849 61.9254) (size 0.889) (layers F.Cu B.Cu) (net 48))
+ (segment (start 134.62 67.056) (end 134.62 65.8111) (width 0.254) (layer F.Cu) (net 49))
+ (segment (start 136.525 59.056) (end 136.525 60.4123) (width 0.254) (layer F.Cu) (net 49))
+ (segment (start 136.525 60.4123) (end 133.35 63.5873) (width 0.254) (layer F.Cu) (net 49))
+ (segment (start 133.35 63.5873) (end 133.35 65.0569) (width 0.254) (layer F.Cu) (net 49))
+ (segment (start 133.35 65.0569) (end 134.1042 65.8111) (width 0.254) (layer F.Cu) (net 49))
+ (segment (start 134.1042 65.8111) (end 134.62 65.8111) (width 0.254) (layer F.Cu) (net 49))
+ (segment (start 144.78 67.056) (end 144.78 65.8111) (width 0.254) (layer F.Cu) (net 50))
+ (segment (start 146.685 59.056) (end 146.685 61.461) (width 0.254) (layer F.Cu) (net 50))
+ (segment (start 146.685 61.461) (end 146.0249 62.1211) (width 0.254) (layer F.Cu) (net 50))
+ (segment (start 146.0249 62.1211) (end 146.0249 65.0331) (width 0.254) (layer F.Cu) (net 50))
+ (segment (start 146.0249 65.0331) (end 145.2469 65.8111) (width 0.254) (layer F.Cu) (net 50))
+ (segment (start 145.2469 65.8111) (end 144.78 65.8111) (width 0.254) (layer F.Cu) (net 50))
+ (segment (start 144.78 64.516) (end 144.78 63.2711) (width 0.254) (layer F.Cu) (net 51))
+ (segment (start 145.415 59.056) (end 145.415 62.6361) (width 0.254) (layer F.Cu) (net 51))
+ (segment (start 145.415 62.6361) (end 144.78 63.2711) (width 0.254) (layer F.Cu) (net 51))
+ (segment (start 147.32 67.056) (end 147.32 65.8111) (width 0.254) (layer F.Cu) (net 52))
+ (segment (start 147.955 59.056) (end 147.955 61.461) (width 0.254) (layer F.Cu) (net 52))
+ (segment (start 147.955 61.461) (end 148.59 62.096) (width 0.254) (layer F.Cu) (net 52))
+ (segment (start 148.59 62.096) (end 148.59 65.0569) (width 0.254) (layer F.Cu) (net 52))
+ (segment (start 148.59 65.0569) (end 147.8358 65.8111) (width 0.254) (layer F.Cu) (net 52))
+ (segment (start 147.8358 65.8111) (end 147.32 65.8111) (width 0.254) (layer F.Cu) (net 52))
+ (segment (start 149.86 67.056) (end 149.86 65.8111) (width 0.254) (layer F.Cu) (net 53))
+ (segment (start 149.86 65.8111) (end 150.3268 65.8111) (width 0.254) (layer F.Cu) (net 53))
+ (segment (start 150.3268 65.8111) (end 151.13 65.0079) (width 0.254) (layer F.Cu) (net 53))
+ (segment (start 151.13 65.0079) (end 151.13 62.096) (width 0.254) (layer F.Cu) (net 53))
+ (segment (start 151.13 62.096) (end 150.495 61.461) (width 0.254) (layer F.Cu) (net 53))
+ (segment (start 150.495 61.461) (end 150.495 59.056) (width 0.254) (layer F.Cu) (net 53))
+ (segment (start 149.86 64.516) (end 149.86 63.2711) (width 0.254) (layer F.Cu) (net 54))
+ (segment (start 149.225 59.056) (end 149.225 62.6361) (width 0.254) (layer F.Cu) (net 54))
+ (segment (start 149.225 62.6361) (end 149.86 63.2711) (width 0.254) (layer F.Cu) (net 54))
+ (segment (start 152.4 67.056) (end 152.4 65.8111) (width 0.254) (layer F.Cu) (net 55))
+ (segment (start 151.765 59.056) (end 151.765 60.7365) (width 0.254) (layer F.Cu) (net 55))
+ (segment (start 151.765 60.7365) (end 153.67 62.6415) (width 0.254) (layer F.Cu) (net 55))
+ (segment (start 153.67 62.6415) (end 153.67 65.0569) (width 0.254) (layer F.Cu) (net 55))
+ (segment (start 153.67 65.0569) (end 152.9158 65.8111) (width 0.254) (layer F.Cu) (net 55))
+ (segment (start 152.9158 65.8111) (end 152.4 65.8111) (width 0.254) (layer F.Cu) (net 55))
+ (segment (start 153.035 59.056) (end 153.035 60.4123) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 160.02 67.056) (end 160.02 65.8111) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 160.02 65.8111) (end 159.5531 65.8111) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 159.5531 65.8111) (end 158.7751 65.0331) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 158.7751 65.0331) (end 158.7751 64.0165) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 158.7751 64.0165) (end 157.0194 62.2608) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 157.0194 62.2608) (end 154.8835 62.2608) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 154.8835 62.2608) (end 153.035 60.4123) (width 0.254) (layer F.Cu) (net 56))
+ (segment (start 159.2419 64.516) (end 158.7751 64.0492) (width 0.254) (layer B.Cu) (net 57))
+ (via (at 119.3807 60.7131) (size 0.889) (layers F.Cu B.Cu) (net 57))
+ (segment (start 117.475 60.4123) (end 117.475 59.056) (width 0.254) (layer F.Cu) (net 57))
+ (segment (start 155.439 60.7131) (end 119.3807 60.7131) (width 0.254) (layer B.Cu) (net 57))
+ (segment (start 158.7751 64.0492) (end 155.439 60.7131) (width 0.254) (layer B.Cu) (net 57))
+ (segment (start 119.0799 60.4123) (end 119.3807 60.7131) (width 0.254) (layer F.Cu) (net 57))
+ (segment (start 117.475 60.4123) (end 119.0799 60.4123) (width 0.254) (layer F.Cu) (net 57))
+ (segment (start 159.2419 64.516) (end 160.02 64.516) (width 0.254) (layer B.Cu) (net 57) (tstamp 562B389B))
+ (segment (start 154.305 59.056) (end 154.305 60.4123) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 162.56 67.056) (end 162.56 65.8111) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 162.56 65.8111) (end 162.0931 65.8111) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 162.0931 65.8111) (end 161.3151 65.0331) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 161.3151 65.0331) (end 161.3151 64.0165) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 161.3151 64.0165) (end 158.5517 61.2531) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 158.5517 61.2531) (end 155.1458 61.2531) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 155.1458 61.2531) (end 154.305 60.4123) (width 0.254) (layer F.Cu) (net 58))
+ (segment (start 107.95 43.18) (end 107.95 45.8) (width 0.254) (layer F.Cu) (net 59))
+ (segment (start 107.95 45.8) (end 107.014 46.736) (width 0.254) (layer F.Cu) (net 59) (tstamp 55B70261))
+ (segment (start 124.587 48.006) (end 120.335 48.006) (width 0.254) (layer B.Cu) (net 60))
+ (segment (start 119.38 47.051) (end 119.38 45.847) (width 0.254) (layer B.Cu) (net 60))
+ (segment (start 120.335 48.006) (end 119.38 47.051) (width 0.254) (layer B.Cu) (net 60))
+ (via (at 124.587 48.006) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 60))
+ (segment (start 120.015 49.656) (end 120.015 50.331) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 121.889801 51.012001) (end 124.587 48.314802) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 124.587 48.314802) (end 124.587 48.006) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 118.11 40.64) (end 119.38 41.91) (width 0.254) (layer B.Cu) (net 60))
+ (segment (start 119.38 41.91) (end 119.38 45.339) (width 0.254) (layer B.Cu) (net 60) (tstamp 562C7C3E))
+ (segment (start 120.38571 50.07671) (end 120.015 49.706) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 120.38571 50.582674) (end 120.38571 50.07671) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 120.915046 51.11201) (end 120.38571 50.582674) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 121.654954 51.11201) (end 120.915046 51.11201) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 121.754963 51.012001) (end 121.654954 51.11201) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 121.889801 51.012001) (end 121.754963 51.012001) (width 0.254) (layer F.Cu) (net 60))
+ (segment (start 90.17 54.102) (end 96.774 60.706) (width 0.254) (layer B.Cu) (net 61))
+ (segment (start 88.9 54.102) (end 90.17 54.102) (width 0.254) (layer B.Cu) (net 61))
+ (segment (start 96.774 60.706) (end 104.231824 60.706) (width 0.254) (layer B.Cu) (net 61))
+ (segment (start 107.575383 57.658) (end 108.204 57.658) (width 0.254) (layer B.Cu) (net 61))
+ (segment (start 104.231824 60.706) (end 107.279824 57.658) (width 0.254) (layer B.Cu) (net 61))
+ (segment (start 107.279824 57.658) (end 107.575383 57.658) (width 0.254) (layer B.Cu) (net 61))
+ (segment (start 88.9 54.102) (end 86.36 54.102) (width 0.254) (layer B.Cu) (net 61))
+ (via (at 108.204 57.658) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 61))
+ (segment (start 117.455979 57.091979) (end 118.745 58.381) (width 0.254) (layer F.Cu) (net 61))
+ (segment (start 108.770021 57.091979) (end 117.455979 57.091979) (width 0.254) (layer F.Cu) (net 61))
+ (segment (start 108.204 57.658) (end 108.770021 57.091979) (width 0.254) (layer F.Cu) (net 61))
+ (segment (start 118.745 58.381) (end 118.745 59.056) (width 0.254) (layer F.Cu) (net 61))
+ (segment (start 119.38 64.516) (end 120.675399 65.811399) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 120.675399 65.811399) (end 146.024601 65.811399) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 146.024601 65.811399) (end 146.456401 65.379599) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 146.456401 65.379599) (end 147.32 64.516) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 91.44 64.516) (end 92.684601 65.760601) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 118.135399 65.760601) (end 118.516401 65.379599) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 118.516401 65.379599) (end 119.38 64.516) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 92.684601 65.760601) (end 118.135399 65.760601) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 86.36 56.642) (end 85.344001 57.657999) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 85.344001 57.657999) (end 85.166199 57.657999) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 88.302591 65.760601) (end 90.195399 65.760601) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 85.166199 57.657999) (end 84.962999 57.861199) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 84.962999 57.861199) (end 84.962999 62.421009) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 84.962999 62.421009) (end 88.302591 65.760601) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 90.576401 65.379599) (end 91.44 64.516) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 90.195399 65.760601) (end 90.576401 65.379599) (width 0.254) (layer B.Cu) (net 62))
+ (segment (start 150.876 69.85) (end 150.876 69.221383) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 150.876 69.221383) (end 151.155399 68.941984) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 151.155399 68.941984) (end 151.155399 65.760601) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 151.155399 65.760601) (end 151.536401 65.379599) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 151.536401 65.379599) (end 152.4 64.516) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 123.164601 65.811399) (end 121.322591 65.811399) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 120.65 66.48399) (end 120.65 67.633843) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 118.11 70.104) (end 150.622 70.104) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 124.46 64.516) (end 123.164601 65.811399) (width 0.254) (layer F.Cu) (net 63))
+ (via (at 120.65 68.26246) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 63))
+ (segment (start 120.021383 68.26246) (end 120.65 68.26246) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 119.95154 68.26246) (end 120.021383 68.26246) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 121.322591 65.811399) (end 120.65 66.48399) (width 0.254) (layer F.Cu) (net 63))
+ (via (at 150.876 69.85) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 63))
+ (segment (start 118.11 70.104) (end 119.95154 68.26246) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 120.65 67.633843) (end 120.65 68.26246) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 150.622 70.104) (end 150.876 69.85) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 95.656401 65.379599) (end 96.52 64.516) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 96.266 70.104) (end 95.275399 69.113399) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 95.275399 69.113399) (end 95.275399 65.760601) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 95.275399 65.760601) (end 95.656401 65.379599) (width 0.254) (layer F.Cu) (net 63))
+ (segment (start 118.11 70.104) (end 96.266 70.104) (width 0.254) (layer F.Cu) (net 63))
+ (via (at 118.11 70.104) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 63))
+ (segment (start 96.52 64.516) (end 96.52 63.294686) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 89.915999 57.657999) (end 88.9 56.642) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 96.52 63.294686) (end 90.883313 57.657999) (width 0.254) (layer B.Cu) (net 63))
+ (segment (start 90.883313 57.657999) (end 89.915999 57.657999) (width 0.254) (layer B.Cu) (net 63))
+
+ (zone (net 2) (net_name GND) (layer F.Cu) (tstamp 5D22266E) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 166.75 71.25) (xy 84.25 71.25) (xy 84.25 36.25) (xy 166.75 36.25)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 161.038273 36.761995) (xy 160.809465 36.91488) (xy 160.61488 37.109465) (xy 160.461995 37.338273) (xy 160.356686 37.59251)
+ (xy 160.303 37.862408) (xy 160.303 38.137592) (xy 160.356686 38.40749) (xy 160.461995 38.661727) (xy 160.61488 38.890535)
+ (xy 160.809465 39.08512) (xy 161.038273 39.238005) (xy 161.050332 39.243) (xy 160.817323 39.243) (xy 160.302065 39.345492)
+ (xy 159.816702 39.546536) (xy 159.379887 39.838406) (xy 159.008406 40.209887) (xy 158.716536 40.646702) (xy 158.515492 41.132065)
+ (xy 158.413 41.647323) (xy 158.413 42.172677) (xy 158.515492 42.687935) (xy 158.716536 43.173298) (xy 159.008406 43.610113)
+ (xy 159.379887 43.981594) (xy 159.816702 44.273464) (xy 160.302065 44.474508) (xy 160.817323 44.577) (xy 161.342677 44.577)
+ (xy 161.857935 44.474508) (xy 162.343298 44.273464) (xy 162.780113 43.981594) (xy 162.815 43.946707) (xy 162.815001 59.033647)
+ (xy 162.817921 59.063291) (xy 162.817856 59.072554) (xy 162.818789 59.082073) (xy 162.849389 59.373218) (xy 162.861877 59.434055)
+ (xy 162.873507 59.495021) (xy 162.876271 59.504177) (xy 162.962839 59.783833) (xy 162.986896 59.841062) (xy 163.010156 59.898632)
+ (xy 163.014646 59.907077) (xy 163.153885 60.164593) (xy 163.188604 60.216065) (xy 163.222597 60.268012) (xy 163.228642 60.275424)
+ (xy 163.415247 60.500991) (xy 163.459301 60.544738) (xy 163.502739 60.589096) (xy 163.510109 60.595193) (xy 163.736973 60.780219)
+ (xy 163.788691 60.81458) (xy 163.839912 60.849652) (xy 163.848325 60.854201) (xy 164.106806 60.991638) (xy 164.164242 61.015312)
+ (xy 164.22127 61.039754) (xy 164.230407 61.042583) (xy 164.510661 61.127197) (xy 164.571577 61.139259) (xy 164.632293 61.152164)
+ (xy 164.641804 61.153164) (xy 164.933156 61.181731) (xy 164.933163 61.181731) (xy 164.966353 61.185) (xy 165.466496 61.185)
+ (xy 165.657663 61.203744) (xy 165.809322 61.249532) (xy 165.949195 61.323905) (xy 166.071961 61.42403) (xy 166.172941 61.546094)
+ (xy 166.248291 61.68545) (xy 166.295136 61.836781) (xy 166.315 62.025783) (xy 166.315001 70.815) (xy 151.367152 70.815)
+ (xy 151.387335 70.80664) (xy 151.564141 70.688502) (xy 151.714502 70.538141) (xy 151.83264 70.361335) (xy 151.914015 70.164878)
+ (xy 151.9555 69.956321) (xy 151.9555 69.743679) (xy 151.921191 69.5712) (xy 155.689377 69.5712) (xy 155.7268 69.574886)
+ (xy 155.764223 69.5712) (xy 155.764226 69.5712) (xy 155.876178 69.560174) (xy 156.019815 69.516602) (xy 156.152192 69.445845)
+ (xy 156.268222 69.350622) (xy 156.292084 69.321547) (xy 157.105271 68.50836) (xy 157.186223 68.532916) (xy 157.406381 68.5546)
+ (xy 157.553619 68.5546) (xy 157.773777 68.532916) (xy 158.056264 68.447225) (xy 158.316606 68.308069) (xy 158.544797 68.120797)
+ (xy 158.732069 67.892606) (xy 158.75 67.85906) (xy 158.767931 67.892606) (xy 158.955203 68.120797) (xy 159.183394 68.308069)
+ (xy 159.443736 68.447225) (xy 159.726223 68.532916) (xy 159.946381 68.5546) (xy 160.093619 68.5546) (xy 160.313777 68.532916)
+ (xy 160.596264 68.447225) (xy 160.856606 68.308069) (xy 161.084797 68.120797) (xy 161.272069 67.892606) (xy 161.29 67.85906)
+ (xy 161.307931 67.892606) (xy 161.495203 68.120797) (xy 161.723394 68.308069) (xy 161.983736 68.447225) (xy 162.266223 68.532916)
+ (xy 162.486381 68.5546) (xy 162.633619 68.5546) (xy 162.853777 68.532916) (xy 163.136264 68.447225) (xy 163.396606 68.308069)
+ (xy 163.624797 68.120797) (xy 163.812069 67.892606) (xy 163.951225 67.632264) (xy 164.036916 67.349777) (xy 164.065851 67.056)
+ (xy 164.036916 66.762223) (xy 163.951225 66.479736) (xy 163.812069 66.219394) (xy 163.624797 65.991203) (xy 163.396606 65.803931)
+ (xy 163.356567 65.78253) (xy 163.570293 65.622854) (xy 163.766817 65.404488) (xy 163.916964 65.151978) (xy 164.014963 64.875027)
+ (xy 163.894464 64.643) (xy 162.687 64.643) (xy 162.687 64.663) (xy 162.433 64.663) (xy 162.433 64.643)
+ (xy 162.413 64.643) (xy 162.413 64.389) (xy 162.433 64.389) (xy 162.433 63.182183) (xy 162.687 63.182183)
+ (xy 162.687 64.389) (xy 163.894464 64.389) (xy 164.014963 64.156973) (xy 163.916964 63.880022) (xy 163.766817 63.627512)
+ (xy 163.570293 63.409146) (xy 163.334944 63.233316) (xy 163.069814 63.106778) (xy 162.919026 63.061042) (xy 162.687 63.182183)
+ (xy 162.433 63.182183) (xy 162.200974 63.061042) (xy 162.050186 63.106778) (xy 161.785056 63.233316) (xy 161.684599 63.308368)
+ (xy 159.116984 60.740754) (xy 159.093122 60.711678) (xy 158.977092 60.616455) (xy 158.844715 60.545698) (xy 158.701078 60.502126)
+ (xy 158.589126 60.4911) (xy 158.589123 60.4911) (xy 158.5517 60.487414) (xy 158.514277 60.4911) (xy 157.487854 60.4911)
+ (xy 157.552251 60.438251) (xy 157.650258 60.318829) (xy 157.723084 60.182582) (xy 157.767929 60.034745) (xy 157.783072 59.881)
+ (xy 157.783072 59.517003) (xy 157.94042 59.674351) (xy 157.964278 59.703422) (xy 158.080308 59.798645) (xy 158.212685 59.869402)
+ (xy 158.356322 59.912974) (xy 158.468274 59.924) (xy 158.468276 59.924) (xy 158.505699 59.927686) (xy 158.543122 59.924)
+ (xy 158.77121 59.924) (xy 158.883715 59.958128) (xy 159.05575 59.975072) (xy 159.96825 59.975072) (xy 160.140285 59.958128)
+ (xy 160.305709 59.907947) (xy 160.458164 59.826458) (xy 160.591792 59.716792) (xy 160.701458 59.583164) (xy 160.782947 59.430709)
+ (xy 160.833128 59.265285) (xy 160.850072 59.09325) (xy 160.850072 58.60575) (xy 160.833128 58.433715) (xy 160.782947 58.268291)
+ (xy 160.701458 58.115836) (xy 160.591792 57.982208) (xy 160.585436 57.976992) (xy 160.663185 57.913185) (xy 160.742537 57.816494)
+ (xy 160.801502 57.70618) (xy 160.837812 57.586482) (xy 160.850072 57.462) (xy 160.847 57.26025) (xy 160.68825 57.1015)
+ (xy 159.639 57.1015) (xy 159.639 57.1215) (xy 159.385 57.1215) (xy 159.385 57.1015) (xy 158.33575 57.1015)
+ (xy 158.177 57.26025) (xy 158.173928 57.462) (xy 158.186188 57.586482) (xy 158.222498 57.70618) (xy 158.281463 57.816494)
+ (xy 158.360815 57.913185) (xy 158.438564 57.976992) (xy 158.432208 57.982208) (xy 158.419285 57.997955) (xy 158.286784 57.865453)
+ (xy 158.262922 57.836378) (xy 158.146892 57.741155) (xy 158.014515 57.670398) (xy 157.870878 57.626826) (xy 157.758926 57.6158)
+ (xy 157.758923 57.6158) (xy 157.7215 57.612114) (xy 157.684077 57.6158) (xy 157.607 57.6158) (xy 157.607 56.487)
+ (xy 158.173928 56.487) (xy 158.177 56.68875) (xy 158.33575 56.8475) (xy 159.385 56.8475) (xy 159.385 56.01075)
+ (xy 159.639 56.01075) (xy 159.639 56.8475) (xy 160.68825 56.8475) (xy 160.847 56.68875) (xy 160.850072 56.487)
+ (xy 160.837812 56.362518) (xy 160.801502 56.24282) (xy 160.742537 56.132506) (xy 160.663185 56.035815) (xy 160.566494 55.956463)
+ (xy 160.45618 55.897498) (xy 160.336482 55.861188) (xy 160.212 55.848928) (xy 159.79775 55.852) (xy 159.639 56.01075)
+ (xy 159.385 56.01075) (xy 159.22625 55.852) (xy 158.812 55.848928) (xy 158.687518 55.861188) (xy 158.56782 55.897498)
+ (xy 158.457506 55.956463) (xy 158.360815 56.035815) (xy 158.281463 56.132506) (xy 158.222498 56.24282) (xy 158.186188 56.362518)
+ (xy 158.173928 56.487) (xy 157.607 56.487) (xy 157.607 54.266422) (xy 157.610686 54.228999) (xy 157.607 54.191574)
+ (xy 157.598178 54.102) (xy 157.607 54.012426) (xy 157.607 54.012424) (xy 157.610686 53.975001) (xy 157.607 53.937578)
+ (xy 157.607 51.071539) (xy 157.650258 51.018829) (xy 157.723084 50.882582) (xy 157.767929 50.734745) (xy 157.783072 50.581)
+ (xy 157.783072 48.831) (xy 157.767929 48.677255) (xy 157.723084 48.529418) (xy 157.650258 48.393171) (xy 157.552251 48.273749)
+ (xy 157.432829 48.175742) (xy 157.296582 48.102916) (xy 157.148745 48.058071) (xy 156.995 48.042928) (xy 156.695 48.042928)
+ (xy 156.541255 48.058071) (xy 156.393418 48.102916) (xy 156.257171 48.175742) (xy 156.21 48.214454) (xy 156.162829 48.175742)
+ (xy 156.026582 48.102916) (xy 155.878745 48.058071) (xy 155.725 48.042928) (xy 155.425 48.042928) (xy 155.271255 48.058071)
+ (xy 155.123418 48.102916) (xy 154.987171 48.175742) (xy 154.94 48.214454) (xy 154.892829 48.175742) (xy 154.756582 48.102916)
+ (xy 154.608745 48.058071) (xy 154.455 48.042928) (xy 154.369402 48.042928) (xy 155.452452 46.959879) (xy 155.481522 46.936022)
+ (xy 155.576745 46.819992) (xy 155.647502 46.687615) (xy 155.691074 46.543978) (xy 155.7021 46.432026) (xy 155.7021 46.432024)
+ (xy 155.705786 46.394601) (xy 155.7021 46.357178) (xy 155.7021 44.589803) (xy 155.850974 44.634958) (xy 156.083 44.513817)
+ (xy 156.083 43.307) (xy 156.337 43.307) (xy 156.337 44.513817) (xy 156.569026 44.634958) (xy 156.719814 44.589222)
+ (xy 156.984944 44.462684) (xy 157.220293 44.286854) (xy 157.416817 44.068488) (xy 157.566964 43.815978) (xy 157.664963 43.539027)
+ (xy 157.544464 43.307) (xy 156.337 43.307) (xy 156.083 43.307) (xy 156.063 43.307) (xy 156.063 43.053)
+ (xy 156.083 43.053) (xy 156.083 43.033) (xy 156.337 43.033) (xy 156.337 43.053) (xy 157.544464 43.053)
+ (xy 157.664963 42.820973) (xy 157.566964 42.544022) (xy 157.416817 42.291512) (xy 157.220293 42.073146) (xy 157.006567 41.91347)
+ (xy 157.046606 41.892069) (xy 157.274797 41.704797) (xy 157.462069 41.476606) (xy 157.601225 41.216264) (xy 157.686916 40.933777)
+ (xy 157.715851 40.64) (xy 157.686916 40.346223) (xy 157.601225 40.063736) (xy 157.462069 39.803394) (xy 157.274797 39.575203)
+ (xy 157.046606 39.387931) (xy 156.786264 39.248775) (xy 156.503777 39.163084) (xy 156.283619 39.1414) (xy 156.136381 39.1414)
+ (xy 155.916223 39.163084) (xy 155.633736 39.248775) (xy 155.373394 39.387931) (xy 155.145203 39.575203) (xy 154.957931 39.803394)
+ (xy 154.94 39.83694) (xy 154.922069 39.803394) (xy 154.734797 39.575203) (xy 154.506606 39.387931) (xy 154.246264 39.248775)
+ (xy 153.963777 39.163084) (xy 153.743619 39.1414) (xy 153.596381 39.1414) (xy 153.376223 39.163084) (xy 153.093736 39.248775)
+ (xy 152.833394 39.387931) (xy 152.605203 39.575203) (xy 152.417931 39.803394) (xy 152.4 39.83694) (xy 152.382069 39.803394)
+ (xy 152.194797 39.575203) (xy 151.966606 39.387931) (xy 151.706264 39.248775) (xy 151.423777 39.163084) (xy 151.203619 39.1414)
+ (xy 151.056381 39.1414) (xy 150.836223 39.163084) (xy 150.553736 39.248775) (xy 150.293394 39.387931) (xy 150.065203 39.575203)
+ (xy 149.877931 39.803394) (xy 149.854137 39.84791) (xy 149.796817 39.751512) (xy 149.600293 39.533146) (xy 149.364944 39.357316)
+ (xy 149.099814 39.230778) (xy 148.949026 39.185042) (xy 148.717 39.306183) (xy 148.717 40.513) (xy 148.737 40.513)
+ (xy 148.737 40.767) (xy 148.717 40.767) (xy 148.717 40.787) (xy 148.463 40.787) (xy 148.463 40.767)
+ (xy 148.443 40.767) (xy 148.443 40.513) (xy 148.463 40.513) (xy 148.463 39.306183) (xy 148.230974 39.185042)
+ (xy 148.080186 39.230778) (xy 147.815056 39.357316) (xy 147.579707 39.533146) (xy 147.383183 39.751512) (xy 147.325863 39.84791)
+ (xy 147.302069 39.803394) (xy 147.114797 39.575203) (xy 146.886606 39.387931) (xy 146.626264 39.248775) (xy 146.343777 39.163084)
+ (xy 146.123619 39.1414) (xy 145.976381 39.1414) (xy 145.756223 39.163084) (xy 145.473736 39.248775) (xy 145.213394 39.387931)
+ (xy 144.985203 39.575203) (xy 144.797931 39.803394) (xy 144.78 39.83694) (xy 144.762069 39.803394) (xy 144.574797 39.575203)
+ (xy 144.346606 39.387931) (xy 144.086264 39.248775) (xy 143.803777 39.163084) (xy 143.583619 39.1414) (xy 143.436381 39.1414)
+ (xy 143.216223 39.163084) (xy 142.933736 39.248775) (xy 142.673394 39.387931) (xy 142.445203 39.575203) (xy 142.257931 39.803394)
+ (xy 142.24 39.83694) (xy 142.222069 39.803394) (xy 142.034797 39.575203) (xy 141.806606 39.387931) (xy 141.546264 39.248775)
+ (xy 141.263777 39.163084) (xy 141.043619 39.1414) (xy 140.896381 39.1414) (xy 140.676223 39.163084) (xy 140.393736 39.248775)
+ (xy 140.133394 39.387931) (xy 139.905203 39.575203) (xy 139.717931 39.803394) (xy 139.7 39.83694) (xy 139.682069 39.803394)
+ (xy 139.494797 39.575203) (xy 139.266606 39.387931) (xy 139.006264 39.248775) (xy 138.723777 39.163084) (xy 138.503619 39.1414)
+ (xy 138.356381 39.1414) (xy 138.136223 39.163084) (xy 137.853736 39.248775) (xy 137.593394 39.387931) (xy 137.556632 39.418101)
+ (xy 135.476484 37.337954) (xy 135.452622 37.308878) (xy 135.336592 37.213655) (xy 135.204215 37.142898) (xy 135.060578 37.099326)
+ (xy 134.948626 37.0883) (xy 134.948623 37.0883) (xy 134.9112 37.084614) (xy 134.873777 37.0883) (xy 101.455223 37.0883)
+ (xy 101.4178 37.084614) (xy 101.380377 37.0883) (xy 101.380374 37.0883) (xy 101.268422 37.099326) (xy 101.124785 37.142898)
+ (xy 101.063164 37.175835) (xy 100.992407 37.213655) (xy 100.923769 37.269985) (xy 100.876378 37.308878) (xy 100.852521 37.337948)
+ (xy 95.372654 42.817816) (xy 95.343578 42.841678) (xy 95.291764 42.904814) (xy 95.248355 42.957708) (xy 95.229854 42.992321)
+ (xy 95.177598 43.090086) (xy 95.134026 43.233723) (xy 95.123 43.345674) (xy 95.119314 43.3831) (xy 95.123 43.420523)
+ (xy 95.123 45.020647) (xy 95.046502 44.906159) (xy 94.896141 44.755798) (xy 94.719335 44.63766) (xy 94.522878 44.556285)
+ (xy 94.314321 44.5148) (xy 94.101679 44.5148) (xy 93.893122 44.556285) (xy 93.696665 44.63766) (xy 93.519859 44.755798)
+ (xy 93.369498 44.906159) (xy 93.25136 45.082965) (xy 93.169985 45.279422) (xy 93.1285 45.487979) (xy 93.1285 45.59617)
+ (xy 92.832653 45.892016) (xy 92.803578 45.915878) (xy 92.763194 45.965087) (xy 92.708355 46.031908) (xy 92.686926 46.072)
+ (xy 92.637598 46.164286) (xy 92.594026 46.307923) (xy 92.583297 46.416857) (xy 92.579314 46.4573) (xy 92.583 46.494723)
+ (xy 92.583001 48.080523) (xy 92.499482 48.055188) (xy 92.375 48.042928) (xy 92.36075 48.046) (xy 92.202 48.20475)
+ (xy 92.202 49.579) (xy 92.222 49.579) (xy 92.222 49.833) (xy 92.202 49.833) (xy 92.202 51.20725)
+ (xy 92.36075 51.366) (xy 92.375 51.369072) (xy 92.499482 51.356812) (xy 92.61918 51.320502) (xy 92.729494 51.261537)
+ (xy 92.759064 51.23727) (xy 92.893418 51.309084) (xy 93.041255 51.353929) (xy 93.195 51.369072) (xy 93.495 51.369072)
+ (xy 93.648745 51.353929) (xy 93.796582 51.309084) (xy 93.932829 51.236258) (xy 93.98 51.197546) (xy 94.027171 51.236258)
+ (xy 94.163418 51.309084) (xy 94.311255 51.353929) (xy 94.465 51.369072) (xy 94.575442 51.369072) (xy 96.84792 53.641551)
+ (xy 96.871778 53.670622) (xy 96.987808 53.765845) (xy 97.120185 53.836602) (xy 97.263822 53.880174) (xy 97.375774 53.8912)
+ (xy 97.375776 53.8912) (xy 97.413199 53.894886) (xy 97.450622 53.8912) (xy 110.934108 53.8912) (xy 111.071956 53.933016)
+ (xy 111.183908 53.944042) (xy 111.183911 53.944042) (xy 111.221334 53.947728) (xy 111.258757 53.944042) (xy 123.131585 53.944042)
+ (xy 123.169008 53.947728) (xy 123.206431 53.944042) (xy 123.206434 53.944042) (xy 123.318386 53.933016) (xy 123.462023 53.889444)
+ (xy 123.5944 53.818687) (xy 123.71043 53.723464) (xy 123.734292 53.694388) (xy 126.696995 50.731685) (xy 126.709188 50.855482)
+ (xy 126.745498 50.97518) (xy 126.804463 51.085494) (xy 126.883815 51.182185) (xy 126.980506 51.261537) (xy 127.09082 51.320502)
+ (xy 127.210518 51.356812) (xy 127.335 51.369072) (xy 127.34925 51.366) (xy 127.508 51.20725) (xy 127.508 49.923144)
+ (xy 127.563614 49.855378) (xy 127.590637 49.822451) (xy 127.65288 49.706001) (xy 127.661394 49.690073) (xy 127.701155 49.559)
+ (xy 127.762 49.559) (xy 127.762 49.579) (xy 127.782 49.579) (xy 127.782 49.833) (xy 127.762 49.833)
+ (xy 127.762 51.20725) (xy 127.92075 51.366) (xy 127.935 51.369072) (xy 128.059482 51.356812) (xy 128.17918 51.320502)
+ (xy 128.289494 51.261537) (xy 128.319064 51.23727) (xy 128.453418 51.309084) (xy 128.601255 51.353929) (xy 128.755 51.369072)
+ (xy 129.055 51.369072) (xy 129.208745 51.353929) (xy 129.356582 51.309084) (xy 129.492829 51.236258) (xy 129.54 51.197546)
+ (xy 129.587171 51.236258) (xy 129.723418 51.309084) (xy 129.871255 51.353929) (xy 130.025 51.369072) (xy 130.325 51.369072)
+ (xy 130.478745 51.353929) (xy 130.626582 51.309084) (xy 130.762829 51.236258) (xy 130.81 51.197546) (xy 130.857171 51.236258)
+ (xy 130.993418 51.309084) (xy 131.141255 51.353929) (xy 131.295 51.369072) (xy 131.595 51.369072) (xy 131.748745 51.353929)
+ (xy 131.896582 51.309084) (xy 132.032829 51.236258) (xy 132.08 51.197546) (xy 132.127171 51.236258) (xy 132.263418 51.309084)
+ (xy 132.411255 51.353929) (xy 132.565 51.369072) (xy 132.865 51.369072) (xy 133.018745 51.353929) (xy 133.166582 51.309084)
+ (xy 133.302829 51.236258) (xy 133.35 51.197546) (xy 133.397171 51.236258) (xy 133.533418 51.309084) (xy 133.681255 51.353929)
+ (xy 133.835 51.369072) (xy 134.135 51.369072) (xy 134.288745 51.353929) (xy 134.436582 51.309084) (xy 134.532666 51.257726)
+ (xy 134.554691 51.298931) (xy 134.659436 51.426564) (xy 134.691417 51.45281) (xy 135.252193 52.013587) (xy 135.278436 52.045564)
+ (xy 135.310412 52.071806) (xy 135.310414 52.071808) (xy 135.348691 52.103221) (xy 135.406068 52.150309) (xy 135.551683 52.228142)
+ (xy 135.709684 52.276071) (xy 135.83283 52.2882) (xy 135.832839 52.2882) (xy 135.873999 52.292254) (xy 135.915159 52.2882)
+ (xy 137.542157 52.2882) (xy 137.542459 52.288502) (xy 137.719265 52.40664) (xy 137.915722 52.488015) (xy 138.124279 52.5295)
+ (xy 138.303 52.5295) (xy 138.303001 53.2638) (xy 129.581163 53.2638) (xy 129.54 53.259746) (xy 129.498837 53.2638)
+ (xy 129.49883 53.2638) (xy 129.375684 53.275929) (xy 129.217683 53.323858) (xy 129.072068 53.401691) (xy 128.979054 53.478026)
+ (xy 128.944436 53.506436) (xy 128.918194 53.538412) (xy 125.241678 57.214928) (xy 125.12825 57.1015) (xy 124.079 57.1015)
+ (xy 124.079 57.1215) (xy 123.825 57.1215) (xy 123.825 57.1015) (xy 122.77575 57.1015) (xy 122.617 57.26025)
+ (xy 122.613928 57.462) (xy 122.626188 57.586482) (xy 122.662498 57.70618) (xy 122.721463 57.816494) (xy 122.800815 57.913185)
+ (xy 122.878564 57.976992) (xy 122.872208 57.982208) (xy 122.822559 58.042706) (xy 122.762878 58.017985) (xy 122.554321 57.9765)
+ (xy 122.341679 57.9765) (xy 122.210426 58.002608) (xy 122.207929 57.977255) (xy 122.163084 57.829418) (xy 122.090258 57.693171)
+ (xy 121.992251 57.573749) (xy 121.872829 57.475742) (xy 121.736582 57.402916) (xy 121.588745 57.358071) (xy 121.435 57.342928)
+ (xy 121.135 57.342928) (xy 120.981255 57.358071) (xy 120.833418 57.402916) (xy 120.699064 57.47473) (xy 120.669494 57.450463)
+ (xy 120.55918 57.391498) (xy 120.439482 57.355188) (xy 120.315 57.342928) (xy 120.30075 57.346) (xy 120.142 57.50475)
+ (xy 120.142 58.879) (xy 120.162 58.879) (xy 120.162 59.133) (xy 120.142 59.133) (xy 120.142 59.153)
+ (xy 119.888 59.153) (xy 119.888 59.133) (xy 119.868 59.133) (xy 119.868 58.879) (xy 119.888 58.879)
+ (xy 119.888 57.50475) (xy 119.72925 57.346) (xy 119.715 57.342928) (xy 119.590518 57.355188) (xy 119.47082 57.391498)
+ (xy 119.360506 57.450463) (xy 119.330936 57.47473) (xy 119.196582 57.402916) (xy 119.048745 57.358071) (xy 118.895 57.342928)
+ (xy 118.784559 57.342928) (xy 118.021263 56.579633) (xy 117.997401 56.550557) (xy 117.919957 56.487) (xy 122.613928 56.487)
+ (xy 122.617 56.68875) (xy 122.77575 56.8475) (xy 123.825 56.8475) (xy 123.825 56.01075) (xy 124.079 56.01075)
+ (xy 124.079 56.8475) (xy 125.12825 56.8475) (xy 125.287 56.68875) (xy 125.290072 56.487) (xy 125.277812 56.362518)
+ (xy 125.241502 56.24282) (xy 125.182537 56.132506) (xy 125.103185 56.035815) (xy 125.006494 55.956463) (xy 124.89618 55.897498)
+ (xy 124.776482 55.861188) (xy 124.652 55.848928) (xy 124.23775 55.852) (xy 124.079 56.01075) (xy 123.825 56.01075)
+ (xy 123.66625 55.852) (xy 123.252 55.848928) (xy 123.127518 55.861188) (xy 123.00782 55.897498) (xy 122.897506 55.956463)
+ (xy 122.800815 56.035815) (xy 122.721463 56.132506) (xy 122.662498 56.24282) (xy 122.626188 56.362518) (xy 122.613928 56.487)
+ (xy 117.919957 56.487) (xy 117.881371 56.455334) (xy 117.748994 56.384577) (xy 117.605357 56.341005) (xy 117.493405 56.329979)
+ (xy 117.493402 56.329979) (xy 117.455979 56.326293) (xy 117.418556 56.329979) (xy 108.807444 56.329979) (xy 108.770021 56.326293)
+ (xy 108.732598 56.329979) (xy 108.732595 56.329979) (xy 108.620643 56.341005) (xy 108.477006 56.384577) (xy 108.415385 56.417514)
+ (xy 108.344628 56.455334) (xy 108.315315 56.479391) (xy 108.228599 56.550557) (xy 108.205667 56.5785) (xy 108.097679 56.5785)
+ (xy 107.889122 56.619985) (xy 107.692665 56.70136) (xy 107.515859 56.819498) (xy 107.487859 56.847498) (xy 107.348252 56.847498)
+ (xy 107.507 56.68875) (xy 107.510072 56.487) (xy 107.497812 56.362518) (xy 107.461502 56.24282) (xy 107.402537 56.132506)
+ (xy 107.323185 56.035815) (xy 107.226494 55.956463) (xy 107.11618 55.897498) (xy 106.996482 55.861188) (xy 106.872 55.848928)
+ (xy 106.45775 55.852) (xy 106.299 56.01075) (xy 106.299 56.8475) (xy 106.319 56.8475) (xy 106.319 57.1015)
+ (xy 106.299 57.1015) (xy 106.299 57.1215) (xy 106.045 57.1215) (xy 106.045 57.1015) (xy 104.99575 57.1015)
+ (xy 104.837 57.26025) (xy 104.833928 57.462) (xy 104.846188 57.586482) (xy 104.848062 57.592659) (xy 104.765821 57.5763)
+ (xy 104.553179 57.5763) (xy 104.364924 57.613747) (xy 104.344077 57.6158) (xy 104.246761 57.6158) (xy 104.212251 57.573749)
+ (xy 104.092829 57.475742) (xy 103.956582 57.402916) (xy 103.808745 57.358071) (xy 103.655 57.342928) (xy 103.355 57.342928)
+ (xy 103.201255 57.358071) (xy 103.053418 57.402916) (xy 102.919064 57.47473) (xy 102.889494 57.450463) (xy 102.77918 57.391498)
+ (xy 102.659482 57.355188) (xy 102.535 57.342928) (xy 102.52075 57.346) (xy 102.362 57.50475) (xy 102.362 58.879)
+ (xy 102.382 58.879) (xy 102.382 59.133) (xy 102.362 59.133) (xy 102.362 60.50725) (xy 102.52075 60.666)
+ (xy 102.535 60.669072) (xy 102.659482 60.656812) (xy 102.77918 60.620502) (xy 102.889494 60.561537) (xy 102.919064 60.53727)
+ (xy 103.053418 60.609084) (xy 103.201255 60.653929) (xy 103.355 60.669072) (xy 103.655 60.669072) (xy 103.808745 60.653929)
+ (xy 103.956582 60.609084) (xy 104.092829 60.536258) (xy 104.212251 60.438251) (xy 104.310258 60.318829) (xy 104.383084 60.182582)
+ (xy 104.427929 60.034745) (xy 104.443072 59.881) (xy 104.443072 59.713398) (xy 104.553179 59.7353) (xy 104.663122 59.7353)
+ (xy 104.697364 59.763402) (xy 104.740307 59.798645) (xy 104.803558 59.832453) (xy 104.872685 59.869402) (xy 105.016322 59.912974)
+ (xy 105.128274 59.924) (xy 105.128277 59.924) (xy 105.1657 59.927686) (xy 105.203123 59.924) (xy 105.43121 59.924)
+ (xy 105.543715 59.958128) (xy 105.71575 59.975072) (xy 106.62825 59.975072) (xy 106.800285 59.958128) (xy 106.817501 59.952906)
+ (xy 106.8175 60.481913) (xy 105.196382 62.103031) (xy 103.288392 62.103031) (xy 103.250969 62.099345) (xy 103.213546 62.103031)
+ (xy 103.213543 62.103031) (xy 103.101591 62.114057) (xy 102.957954 62.157629) (xy 102.916337 62.179874) (xy 102.825576 62.228386)
+ (xy 102.762838 62.279874) (xy 102.709547 62.323609) (xy 102.68569 62.352679) (xy 102.134366 62.904003) (xy 102.1715 62.717321)
+ (xy 102.1715 62.504679) (xy 102.130015 62.296122) (xy 102.04864 62.099665) (xy 101.930502 61.922859) (xy 101.854 61.846357)
+ (xy 101.854 60.661094) (xy 101.935 60.669072) (xy 101.94925 60.666) (xy 102.108 60.50725) (xy 102.108 59.133)
+ (xy 102.088 59.133) (xy 102.088 58.879) (xy 102.108 58.879) (xy 102.108 57.50475) (xy 101.94925 57.346)
+ (xy 101.935 57.342928) (xy 101.810518 57.355188) (xy 101.69082 57.391498) (xy 101.580506 57.450463) (xy 101.550936 57.47473)
+ (xy 101.416582 57.402916) (xy 101.268745 57.358071) (xy 101.115 57.342928) (xy 100.815 57.342928) (xy 100.661255 57.358071)
+ (xy 100.513418 57.402916) (xy 100.377171 57.475742) (xy 100.33 57.514454) (xy 100.282829 57.475742) (xy 100.146582 57.402916)
+ (xy 99.998745 57.358071) (xy 99.845 57.342928) (xy 99.545 57.342928) (xy 99.391255 57.358071) (xy 99.243418 57.402916)
+ (xy 99.107171 57.475742) (xy 99.06 57.514454) (xy 99.012829 57.475742) (xy 98.876582 57.402916) (xy 98.728745 57.358071)
+ (xy 98.575 57.342928) (xy 98.275 57.342928) (xy 98.121255 57.358071) (xy 97.973418 57.402916) (xy 97.837171 57.475742)
+ (xy 97.79 57.514454) (xy 97.742829 57.475742) (xy 97.606582 57.402916) (xy 97.458745 57.358071) (xy 97.305 57.342928)
+ (xy 97.005 57.342928) (xy 96.851255 57.358071) (xy 96.703418 57.402916) (xy 96.567171 57.475742) (xy 96.52 57.514454)
+ (xy 96.472829 57.475742) (xy 96.336582 57.402916) (xy 96.188745 57.358071) (xy 96.035 57.342928) (xy 95.735 57.342928)
+ (xy 95.581255 57.358071) (xy 95.433418 57.402916) (xy 95.297171 57.475742) (xy 95.25 57.514454) (xy 95.202829 57.475742)
+ (xy 95.066582 57.402916) (xy 94.918745 57.358071) (xy 94.765 57.342928) (xy 94.465 57.342928) (xy 94.311255 57.358071)
+ (xy 94.163418 57.402916) (xy 94.027171 57.475742) (xy 93.98 57.514454) (xy 93.932829 57.475742) (xy 93.796582 57.402916)
+ (xy 93.648745 57.358071) (xy 93.495 57.342928) (xy 93.195 57.342928) (xy 93.041255 57.358071) (xy 92.893418 57.402916)
+ (xy 92.757171 57.475742) (xy 92.71 57.514454) (xy 92.662829 57.475742) (xy 92.526582 57.402916) (xy 92.378745 57.358071)
+ (xy 92.225 57.342928) (xy 91.925 57.342928) (xy 91.771255 57.358071) (xy 91.623418 57.402916) (xy 91.487171 57.475742)
+ (xy 91.367749 57.573749) (xy 91.269742 57.693171) (xy 91.196916 57.829418) (xy 91.152071 57.977255) (xy 91.136928 58.131)
+ (xy 91.136928 59.881) (xy 91.152071 60.034745) (xy 91.196916 60.182582) (xy 91.207426 60.202244) (xy 88.903874 62.505796)
+ (xy 88.9 62.505414) (xy 88.862575 62.5091) (xy 88.862574 62.5091) (xy 88.750622 62.520126) (xy 88.606985 62.563698)
+ (xy 88.474608 62.634455) (xy 88.358578 62.729678) (xy 88.263355 62.845708) (xy 88.192598 62.978085) (xy 88.149026 63.121722)
+ (xy 88.139 63.223519) (xy 88.063394 63.263931) (xy 87.835203 63.451203) (xy 87.647931 63.679394) (xy 87.508775 63.939736)
+ (xy 87.423084 64.222223) (xy 87.394149 64.516) (xy 87.423084 64.809777) (xy 87.508775 65.092264) (xy 87.647931 65.352606)
+ (xy 87.835203 65.580797) (xy 87.843265 65.587414) (xy 87.79222 65.602898) (xy 87.681906 65.661863) (xy 87.585215 65.741215)
+ (xy 87.505863 65.837906) (xy 87.446898 65.94822) (xy 87.410588 66.067918) (xy 87.398328 66.1924) (xy 87.398328 67.9196)
+ (xy 87.410588 68.044082) (xy 87.446898 68.16378) (xy 87.505863 68.274094) (xy 87.585215 68.370785) (xy 87.681906 68.450137)
+ (xy 87.79222 68.509102) (xy 87.911918 68.545412) (xy 88.0364 68.557672) (xy 89.7636 68.557672) (xy 89.888082 68.545412)
+ (xy 90.00778 68.509102) (xy 90.118094 68.450137) (xy 90.214785 68.370785) (xy 90.294137 68.274094) (xy 90.353102 68.16378)
+ (xy 90.368586 68.112735) (xy 90.375203 68.120797) (xy 90.603394 68.308069) (xy 90.863736 68.447225) (xy 91.146223 68.532916)
+ (xy 91.366381 68.5546) (xy 91.513619 68.5546) (xy 91.733777 68.532916) (xy 92.016264 68.447225) (xy 92.276606 68.308069)
+ (xy 92.504797 68.120797) (xy 92.692069 67.892606) (xy 92.71 67.85906) (xy 92.727931 67.892606) (xy 92.915203 68.120797)
+ (xy 93.143394 68.308069) (xy 93.403736 68.447225) (xy 93.686223 68.532916) (xy 93.906381 68.5546) (xy 94.053619 68.5546)
+ (xy 94.273777 68.532916) (xy 94.513399 68.460228) (xy 94.513399 69.075976) (xy 94.509713 69.113399) (xy 94.513399 69.150822)
+ (xy 94.513399 69.150824) (xy 94.524425 69.262776) (xy 94.567997 69.406413) (xy 94.588759 69.445256) (xy 94.638754 69.538791)
+ (xy 94.667893 69.574297) (xy 94.733977 69.654821) (xy 94.763053 69.678683) (xy 95.700721 70.616351) (xy 95.724578 70.645422)
+ (xy 95.840608 70.740645) (xy 95.972985 70.811402) (xy 95.984846 70.815) (xy 87.135591 70.815) (xy 87.238005 70.661727)
+ (xy 87.343314 70.40749) (xy 87.397 70.137592) (xy 87.397 69.862408) (xy 87.343314 69.59251) (xy 87.238005 69.338273)
+ (xy 87.08512 69.109465) (xy 86.890535 68.91488) (xy 86.661727 68.761995) (xy 86.40749 68.656686) (xy 86.137592 68.603)
+ (xy 85.862408 68.603) (xy 85.59251 68.656686) (xy 85.338273 68.761995) (xy 85.109465 68.91488) (xy 84.91488 69.109465)
+ (xy 84.761995 69.338273) (xy 84.685 69.524154) (xy 84.685 60.198) (xy 84.705928 60.198) (xy 84.718188 60.322482)
+ (xy 84.754498 60.44218) (xy 84.813463 60.552494) (xy 84.892815 60.649185) (xy 84.989506 60.728537) (xy 85.09982 60.787502)
+ (xy 85.219518 60.823812) (xy 85.344 60.836072) (xy 86.07425 60.833) (xy 86.233 60.67425) (xy 86.233 59.309)
+ (xy 86.487 59.309) (xy 86.487 60.67425) (xy 86.64575 60.833) (xy 87.376 60.836072) (xy 87.500482 60.823812)
+ (xy 87.62018 60.787502) (xy 87.63 60.782253) (xy 87.63982 60.787502) (xy 87.759518 60.823812) (xy 87.884 60.836072)
+ (xy 88.61425 60.833) (xy 88.773 60.67425) (xy 88.773 59.309) (xy 89.027 59.309) (xy 89.027 60.67425)
+ (xy 89.18575 60.833) (xy 89.916 60.836072) (xy 90.040482 60.823812) (xy 90.16018 60.787502) (xy 90.270494 60.728537)
+ (xy 90.367185 60.649185) (xy 90.446537 60.552494) (xy 90.505502 60.44218) (xy 90.541812 60.322482) (xy 90.554072 60.198)
+ (xy 90.551 59.46775) (xy 90.39225 59.309) (xy 89.027 59.309) (xy 88.773 59.309) (xy 86.487 59.309)
+ (xy 86.233 59.309) (xy 84.86775 59.309) (xy 84.709 59.46775) (xy 84.705928 60.198) (xy 84.685 60.198)
+ (xy 84.685 53.086) (xy 84.705928 53.086) (xy 84.705928 55.118) (xy 84.718188 55.242482) (xy 84.754498 55.36218)
+ (xy 84.813463 55.472494) (xy 84.892815 55.569185) (xy 84.989506 55.648537) (xy 85.025364 55.667704) (xy 84.896903 55.859958)
+ (xy 84.772447 56.160421) (xy 84.709 56.479391) (xy 84.709 56.804609) (xy 84.772447 57.123579) (xy 84.896903 57.424042)
+ (xy 85.025364 57.616296) (xy 84.989506 57.635463) (xy 84.892815 57.714815) (xy 84.813463 57.811506) (xy 84.754498 57.92182)
+ (xy 84.718188 58.041518) (xy 84.705928 58.166) (xy 84.709 58.89625) (xy 84.86775 59.055) (xy 86.233 59.055)
+ (xy 86.233 59.035) (xy 86.487 59.035) (xy 86.487 59.055) (xy 88.773 59.055) (xy 88.773 59.035)
+ (xy 89.027 59.035) (xy 89.027 59.055) (xy 90.39225 59.055) (xy 90.551 58.89625) (xy 90.554072 58.166)
+ (xy 90.541812 58.041518) (xy 90.505502 57.92182) (xy 90.446537 57.811506) (xy 90.367185 57.714815) (xy 90.270494 57.635463)
+ (xy 90.235737 57.616885) (xy 90.279398 57.563684) (xy 90.432705 57.276867) (xy 90.527111 56.965653) (xy 90.558988 56.642)
+ (xy 90.543722 56.487) (xy 104.833928 56.487) (xy 104.837 56.68875) (xy 104.99575 56.8475) (xy 106.045 56.8475)
+ (xy 106.045 56.01075) (xy 105.88625 55.852) (xy 105.472 55.848928) (xy 105.347518 55.861188) (xy 105.22782 55.897498)
+ (xy 105.117506 55.956463) (xy 105.020815 56.035815) (xy 104.941463 56.132506) (xy 104.882498 56.24282) (xy 104.846188 56.362518)
+ (xy 104.833928 56.487) (xy 90.543722 56.487) (xy 90.527111 56.318347) (xy 90.432705 56.007133) (xy 90.279398 55.720316)
+ (xy 90.235737 55.667115) (xy 90.270494 55.648537) (xy 90.367185 55.569185) (xy 90.446537 55.472494) (xy 90.505502 55.36218)
+ (xy 90.541812 55.242482) (xy 90.554072 55.118) (xy 90.554072 53.086) (xy 90.541812 52.961518) (xy 90.505502 52.84182)
+ (xy 90.446537 52.731506) (xy 90.367185 52.634815) (xy 90.270494 52.555463) (xy 90.16018 52.496498) (xy 90.040482 52.460188)
+ (xy 89.916 52.447928) (xy 88.814238 52.447928) (xy 89.057288 52.35433) (xy 89.345511 52.172042) (xy 89.592633 51.937027)
+ (xy 89.789157 51.658317) (xy 89.927531 51.346622) (xy 89.965175 51.196122) (xy 89.847125 50.927) (xy 87.503 50.927)
+ (xy 87.503 50.947) (xy 87.249 50.947) (xy 87.249 50.927) (xy 84.904875 50.927) (xy 84.786825 51.196122)
+ (xy 84.824469 51.346622) (xy 84.962843 51.658317) (xy 85.159367 51.937027) (xy 85.406489 52.172042) (xy 85.694712 52.35433)
+ (xy 85.937762 52.447928) (xy 85.344 52.447928) (xy 85.219518 52.460188) (xy 85.09982 52.496498) (xy 84.989506 52.555463)
+ (xy 84.892815 52.634815) (xy 84.813463 52.731506) (xy 84.754498 52.84182) (xy 84.718188 52.961518) (xy 84.705928 53.086)
+ (xy 84.685 53.086) (xy 84.685 50.731) (xy 91.136928 50.731) (xy 91.149188 50.855482) (xy 91.185498 50.97518)
+ (xy 91.244463 51.085494) (xy 91.323815 51.182185) (xy 91.420506 51.261537) (xy 91.53082 51.320502) (xy 91.650518 51.356812)
+ (xy 91.775 51.369072) (xy 91.78925 51.366) (xy 91.948 51.20725) (xy 91.948 49.833) (xy 91.29875 49.833)
+ (xy 91.14 49.99175) (xy 91.136928 50.731) (xy 84.685 50.731) (xy 84.685 50.403878) (xy 84.786825 50.403878)
+ (xy 84.904875 50.673) (xy 87.249 50.673) (xy 87.249 49.065) (xy 87.503 49.065) (xy 87.503 50.673)
+ (xy 89.847125 50.673) (xy 89.965175 50.403878) (xy 89.927531 50.253378) (xy 89.789157 49.941683) (xy 89.592633 49.662973)
+ (xy 89.345511 49.427958) (xy 89.057288 49.24567) (xy 88.739041 49.123114) (xy 88.403 49.065) (xy 87.503 49.065)
+ (xy 87.249 49.065) (xy 86.349 49.065) (xy 86.012959 49.123114) (xy 85.694712 49.24567) (xy 85.406489 49.427958)
+ (xy 85.159367 49.662973) (xy 84.962843 49.941683) (xy 84.824469 50.253378) (xy 84.786825 50.403878) (xy 84.685 50.403878)
+ (xy 84.685 46.99) (xy 84.732606 46.99) (xy 84.766105 47.330119) (xy 84.865314 47.657168) (xy 85.026421 47.958578)
+ (xy 85.243234 48.222766) (xy 85.507422 48.439579) (xy 85.808832 48.600686) (xy 86.135881 48.699895) (xy 86.390775 48.725)
+ (xy 88.361225 48.725) (xy 88.616119 48.699895) (xy 88.678407 48.681) (xy 91.136928 48.681) (xy 91.14 49.42025)
+ (xy 91.29875 49.579) (xy 91.948 49.579) (xy 91.948 48.20475) (xy 91.78925 48.046) (xy 91.775 48.042928)
+ (xy 91.650518 48.055188) (xy 91.53082 48.091498) (xy 91.420506 48.150463) (xy 91.323815 48.229815) (xy 91.244463 48.326506)
+ (xy 91.185498 48.43682) (xy 91.149188 48.556518) (xy 91.136928 48.681) (xy 88.678407 48.681) (xy 88.943168 48.600686)
+ (xy 89.244578 48.439579) (xy 89.508766 48.222766) (xy 89.725579 47.958578) (xy 89.886686 47.657168) (xy 89.985895 47.330119)
+ (xy 90.019394 46.99) (xy 89.985895 46.649881) (xy 89.886686 46.322832) (xy 89.725579 46.021422) (xy 89.508766 45.757234)
+ (xy 89.244578 45.540421) (xy 88.943168 45.379314) (xy 88.616119 45.280105) (xy 88.361225 45.255) (xy 88.2142 45.255)
+ (xy 88.2142 44.416891) (xy 88.34085 44.378472) (xy 88.494386 44.296405) (xy 88.628962 44.185962) (xy 88.739405 44.051386)
+ (xy 88.821472 43.89785) (xy 88.872008 43.731254) (xy 88.881271 43.6372) (xy 91.27569 43.6372) (xy 91.284188 43.723482)
+ (xy 91.320498 43.84318) (xy 91.379463 43.953494) (xy 91.458815 44.050185) (xy 91.555506 44.129537) (xy 91.66582 44.188502)
+ (xy 91.785518 44.224812) (xy 91.91 44.237072) (xy 93.51 44.237072) (xy 93.634482 44.224812) (xy 93.75418 44.188502)
+ (xy 93.864494 44.129537) (xy 93.961185 44.050185) (xy 94.040537 43.953494) (xy 94.099502 43.84318) (xy 94.135812 43.723482)
+ (xy 94.148072 43.599) (xy 94.148072 41.999) (xy 94.135812 41.874518) (xy 94.099502 41.75482) (xy 94.040537 41.644506)
+ (xy 93.961185 41.547815) (xy 93.864494 41.468463) (xy 93.75418 41.409498) (xy 93.634482 41.373188) (xy 93.51 41.360928)
+ (xy 93.502785 41.360928) (xy 93.523097 41.291702) (xy 92.71 40.478605) (xy 91.896903 41.291702) (xy 91.917215 41.360928)
+ (xy 91.91 41.360928) (xy 91.785518 41.373188) (xy 91.66582 41.409498) (xy 91.555506 41.468463) (xy 91.458815 41.547815)
+ (xy 91.379463 41.644506) (xy 91.320498 41.75482) (xy 91.284188 41.874518) (xy 91.27569 41.9608) (xy 88.401162 41.9608)
+ (xy 88.359999 41.956746) (xy 88.318836 41.9608) (xy 88.31883 41.9608) (xy 88.268938 41.965714) (xy 88.174254 41.936992)
+ (xy 88.001 41.919928) (xy 86.751 41.919928) (xy 86.577746 41.936992) (xy 86.41115 41.987528) (xy 86.257614 42.069595)
+ (xy 86.123038 42.180038) (xy 86.012595 42.314614) (xy 85.930528 42.46815) (xy 85.879992 42.634746) (xy 85.862928 42.808)
+ (xy 85.862928 43.558) (xy 85.879992 43.731254) (xy 85.930528 43.89785) (xy 86.012595 44.051386) (xy 86.123038 44.185962)
+ (xy 86.257614 44.296405) (xy 86.41115 44.378472) (xy 86.5378 44.416891) (xy 86.5378 45.255) (xy 86.390775 45.255)
+ (xy 86.135881 45.280105) (xy 85.808832 45.379314) (xy 85.507422 45.540421) (xy 85.243234 45.757234) (xy 85.026421 46.021422)
+ (xy 84.865314 46.322832) (xy 84.766105 46.649881) (xy 84.732606 46.99) (xy 84.685 46.99) (xy 84.685 41.008)
+ (xy 85.862928 41.008) (xy 85.875188 41.132482) (xy 85.911498 41.25218) (xy 85.970463 41.362494) (xy 86.049815 41.459185)
+ (xy 86.146506 41.538537) (xy 86.25682 41.597502) (xy 86.376518 41.633812) (xy 86.501 41.646072) (xy 87.09025 41.643)
+ (xy 87.249 41.48425) (xy 87.249 40.51) (xy 87.503 40.51) (xy 87.503 41.48425) (xy 87.66175 41.643)
+ (xy 88.251 41.646072) (xy 88.375482 41.633812) (xy 88.49518 41.597502) (xy 88.605494 41.538537) (xy 88.702185 41.459185)
+ (xy 88.781537 41.362494) (xy 88.840502 41.25218) (xy 88.876812 41.132482) (xy 88.889072 41.008) (xy 88.886 40.66875)
+ (xy 88.72725 40.51) (xy 87.503 40.51) (xy 87.249 40.51) (xy 86.02475 40.51) (xy 85.866 40.66875)
+ (xy 85.862928 41.008) (xy 84.685 41.008) (xy 84.685 40.369512) (xy 91.269783 40.369512) (xy 91.311213 40.64913)
+ (xy 91.406397 40.915292) (xy 91.473329 41.040514) (xy 91.717298 41.112097) (xy 92.530395 40.299) (xy 92.889605 40.299)
+ (xy 93.702702 41.112097) (xy 93.946671 41.040514) (xy 94.067571 40.785004) (xy 94.1363 40.510816) (xy 94.150217 40.228488)
+ (xy 94.108787 39.94887) (xy 94.013603 39.682708) (xy 93.946671 39.557486) (xy 93.702702 39.485903) (xy 92.889605 40.299)
+ (xy 92.530395 40.299) (xy 91.717298 39.485903) (xy 91.473329 39.557486) (xy 91.352429 39.812996) (xy 91.2837 40.087184)
+ (xy 91.269783 40.369512) (xy 84.685 40.369512) (xy 84.685 39.758) (xy 85.862928 39.758) (xy 85.866 40.09725)
+ (xy 86.02475 40.256) (xy 87.249 40.256) (xy 87.249 39.28175) (xy 87.503 39.28175) (xy 87.503 40.256)
+ (xy 88.72725 40.256) (xy 88.886 40.09725) (xy 88.889072 39.758) (xy 88.876812 39.633518) (xy 88.840502 39.51382)
+ (xy 88.781537 39.403506) (xy 88.702185 39.306815) (xy 88.701556 39.306298) (xy 91.896903 39.306298) (xy 92.71 40.119395)
+ (xy 93.523097 39.306298) (xy 93.451514 39.062329) (xy 93.196004 38.941429) (xy 92.921816 38.8727) (xy 92.639488 38.858783)
+ (xy 92.35987 38.900213) (xy 92.093708 38.995397) (xy 91.968486 39.062329) (xy 91.896903 39.306298) (xy 88.701556 39.306298)
+ (xy 88.605494 39.227463) (xy 88.49518 39.168498) (xy 88.375482 39.132188) (xy 88.251 39.119928) (xy 87.66175 39.123)
+ (xy 87.503 39.28175) (xy 87.249 39.28175) (xy 87.09025 39.123) (xy 86.501 39.119928) (xy 86.376518 39.132188)
+ (xy 86.25682 39.168498) (xy 86.146506 39.227463) (xy 86.049815 39.306815) (xy 85.970463 39.403506) (xy 85.911498 39.51382)
+ (xy 85.875188 39.633518) (xy 85.862928 39.758) (xy 84.685 39.758) (xy 84.685 37.533504) (xy 84.703744 37.342337)
+ (xy 84.749532 37.190678) (xy 84.823905 37.050805) (xy 84.92403 36.928039) (xy 85.046094 36.827059) (xy 85.18545 36.751709)
+ (xy 85.336781 36.704864) (xy 85.525782 36.685) (xy 161.224154 36.685)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 142.494001 55.855034) (xy 142.432 55.848928) (xy 142.01775 55.852) (xy 141.859 56.01075) (xy 141.859 56.8475)
+ (xy 141.879 56.8475) (xy 141.879 57.1015) (xy 141.859 57.1015) (xy 141.859 57.1215) (xy 141.605 57.1215)
+ (xy 141.605 57.1015) (xy 140.55575 57.1015) (xy 140.397 57.26025) (xy 140.393928 57.462) (xy 140.406188 57.586482)
+ (xy 140.442498 57.70618) (xy 140.501463 57.816494) (xy 140.580815 57.913185) (xy 140.658564 57.976992) (xy 140.652208 57.982208)
+ (xy 140.542542 58.115836) (xy 140.461053 58.268291) (xy 140.410872 58.433715) (xy 140.407489 58.468066) (xy 140.300308 58.525355)
+ (xy 140.184278 58.620578) (xy 140.089055 58.736608) (xy 140.018298 58.868985) (xy 140.003072 58.919178) (xy 140.003072 58.131)
+ (xy 139.987929 57.977255) (xy 139.943084 57.829418) (xy 139.870258 57.693171) (xy 139.772251 57.573749) (xy 139.652829 57.475742)
+ (xy 139.516582 57.402916) (xy 139.368745 57.358071) (xy 139.215 57.342928) (xy 138.915 57.342928) (xy 138.761255 57.358071)
+ (xy 138.613418 57.402916) (xy 138.479064 57.47473) (xy 138.449494 57.450463) (xy 138.33918 57.391498) (xy 138.219482 57.355188)
+ (xy 138.095 57.342928) (xy 138.08075 57.346) (xy 137.922 57.50475) (xy 137.922 58.879) (xy 137.942 58.879)
+ (xy 137.942 59.133) (xy 137.922 59.133) (xy 137.922 60.50725) (xy 138.08075 60.666) (xy 138.095 60.669072)
+ (xy 138.219482 60.656812) (xy 138.332486 60.622533) (xy 138.357598 60.705315) (xy 138.428355 60.837692) (xy 138.523578 60.953722)
+ (xy 138.639608 61.048945) (xy 138.771985 61.119702) (xy 138.915622 61.163274) (xy 139.027574 61.1743) (xy 139.027575 61.1743)
+ (xy 139.065 61.177986) (xy 139.102426 61.1743) (xy 139.563777 61.1743) (xy 139.6012 61.177986) (xy 139.638623 61.1743)
+ (xy 139.638626 61.1743) (xy 139.750578 61.163274) (xy 139.894215 61.119702) (xy 140.026592 61.048945) (xy 140.142622 60.953722)
+ (xy 140.166484 60.924646) (xy 141.130377 59.960754) (xy 141.27575 59.975072) (xy 142.18825 59.975072) (xy 142.360285 59.958128)
+ (xy 142.47279 59.924) (xy 142.984577 59.924) (xy 143.022 59.927686) (xy 143.059423 59.924) (xy 143.059426 59.924)
+ (xy 143.171378 59.912974) (xy 143.315015 59.869402) (xy 143.447392 59.798645) (xy 143.563422 59.703422) (xy 143.587284 59.674346)
+ (xy 143.768347 59.493283) (xy 143.797422 59.469422) (xy 143.892645 59.353392) (xy 143.963402 59.221015) (xy 144.006974 59.077378)
+ (xy 144.018 58.965426) (xy 144.018 58.965423) (xy 144.021686 58.928) (xy 144.018 58.890577) (xy 144.018 54.9402)
+ (xy 156.083001 54.9402) (xy 156.083 57.380523) (xy 155.999482 57.355188) (xy 155.875 57.342928) (xy 155.86075 57.346)
+ (xy 155.702 57.50475) (xy 155.702 58.879) (xy 155.722 58.879) (xy 155.722 59.133) (xy 155.702 59.133)
+ (xy 155.702 59.153) (xy 155.448 59.153) (xy 155.448 59.133) (xy 155.428 59.133) (xy 155.428 58.879)
+ (xy 155.448 58.879) (xy 155.448 57.50475) (xy 155.28925 57.346) (xy 155.275 57.342928) (xy 155.150518 57.355188)
+ (xy 155.03082 57.391498) (xy 154.920506 57.450463) (xy 154.890936 57.47473) (xy 154.756582 57.402916) (xy 154.608745 57.358071)
+ (xy 154.455 57.342928) (xy 154.155 57.342928) (xy 154.001255 57.358071) (xy 153.853418 57.402916) (xy 153.717171 57.475742)
+ (xy 153.67 57.514454) (xy 153.622829 57.475742) (xy 153.486582 57.402916) (xy 153.338745 57.358071) (xy 153.185 57.342928)
+ (xy 152.885 57.342928) (xy 152.731255 57.358071) (xy 152.583418 57.402916) (xy 152.447171 57.475742) (xy 152.4 57.514454)
+ (xy 152.352829 57.475742) (xy 152.216582 57.402916) (xy 152.068745 57.358071) (xy 151.915 57.342928) (xy 151.615 57.342928)
+ (xy 151.461255 57.358071) (xy 151.313418 57.402916) (xy 151.177171 57.475742) (xy 151.13 57.514454) (xy 151.082829 57.475742)
+ (xy 150.946582 57.402916) (xy 150.798745 57.358071) (xy 150.645 57.342928) (xy 150.345 57.342928) (xy 150.191255 57.358071)
+ (xy 150.043418 57.402916) (xy 149.907171 57.475742) (xy 149.86 57.514454) (xy 149.812829 57.475742) (xy 149.676582 57.402916)
+ (xy 149.528745 57.358071) (xy 149.375 57.342928) (xy 149.075 57.342928) (xy 148.921255 57.358071) (xy 148.773418 57.402916)
+ (xy 148.637171 57.475742) (xy 148.59 57.514454) (xy 148.542829 57.475742) (xy 148.406582 57.402916) (xy 148.258745 57.358071)
+ (xy 148.105 57.342928) (xy 147.805 57.342928) (xy 147.651255 57.358071) (xy 147.503418 57.402916) (xy 147.367171 57.475742)
+ (xy 147.32 57.514454) (xy 147.272829 57.475742) (xy 147.136582 57.402916) (xy 146.988745 57.358071) (xy 146.835 57.342928)
+ (xy 146.535 57.342928) (xy 146.381255 57.358071) (xy 146.233418 57.402916) (xy 146.097171 57.475742) (xy 146.05 57.514454)
+ (xy 146.002829 57.475742) (xy 145.866582 57.402916) (xy 145.718745 57.358071) (xy 145.565 57.342928) (xy 145.265 57.342928)
+ (xy 145.111255 57.358071) (xy 144.963418 57.402916) (xy 144.827171 57.475742) (xy 144.707749 57.573749) (xy 144.609742 57.693171)
+ (xy 144.536916 57.829418) (xy 144.492071 57.977255) (xy 144.476928 58.131) (xy 144.476928 59.881) (xy 144.492071 60.034745)
+ (xy 144.536916 60.182582) (xy 144.609742 60.318829) (xy 144.653 60.37154) (xy 144.653001 62.320469) (xy 144.267649 62.705821)
+ (xy 144.238579 62.729678) (xy 144.214722 62.758748) (xy 144.214721 62.758749) (xy 144.143355 62.845708) (xy 144.072599 62.978085)
+ (xy 144.029027 63.121722) (xy 144.019001 63.223518) (xy 143.943394 63.263931) (xy 143.715203 63.451203) (xy 143.527931 63.679394)
+ (xy 143.388775 63.939736) (xy 143.303084 64.222223) (xy 143.274149 64.516) (xy 143.303084 64.809777) (xy 143.388775 65.092264)
+ (xy 143.527931 65.352606) (xy 143.715203 65.580797) (xy 143.723265 65.587414) (xy 143.67222 65.602898) (xy 143.561906 65.661863)
+ (xy 143.465215 65.741215) (xy 143.385863 65.837906) (xy 143.326898 65.94822) (xy 143.290588 66.067918) (xy 143.278328 66.1924)
+ (xy 143.278328 67.538601) (xy 136.039637 67.538601) (xy 136.096916 67.349777) (xy 136.125851 67.056) (xy 136.096916 66.762223)
+ (xy 136.011225 66.479736) (xy 135.872069 66.219394) (xy 135.684797 65.991203) (xy 135.456606 65.803931) (xy 135.416567 65.78253)
+ (xy 135.630293 65.622854) (xy 135.826817 65.404488) (xy 135.976964 65.151978) (xy 136.074963 64.875027) (xy 135.954464 64.643)
+ (xy 134.747 64.643) (xy 134.747 64.663) (xy 134.493 64.663) (xy 134.493 64.643) (xy 134.473 64.643)
+ (xy 134.473 64.389) (xy 134.493 64.389) (xy 134.493 64.369) (xy 134.747 64.369) (xy 134.747 64.389)
+ (xy 135.954464 64.389) (xy 136.074963 64.156973) (xy 135.976964 63.880022) (xy 135.826817 63.627512) (xy 135.630293 63.409146)
+ (xy 135.394944 63.233316) (xy 135.129814 63.106778) (xy 134.979026 63.061042) (xy 134.926426 63.088505) (xy 137.037352 60.977579)
+ (xy 137.066422 60.953722) (xy 137.161645 60.837692) (xy 137.232402 60.705315) (xy 137.257514 60.622533) (xy 137.370518 60.656812)
+ (xy 137.495 60.669072) (xy 137.50925 60.666) (xy 137.668 60.50725) (xy 137.668 59.133) (xy 137.648 59.133)
+ (xy 137.648 58.879) (xy 137.668 58.879) (xy 137.668 57.50475) (xy 137.50925 57.346) (xy 137.495 57.342928)
+ (xy 137.370518 57.355188) (xy 137.25082 57.391498) (xy 137.140506 57.450463) (xy 137.110936 57.47473) (xy 136.976582 57.402916)
+ (xy 136.828745 57.358071) (xy 136.675 57.342928) (xy 136.375 57.342928) (xy 136.221255 57.358071) (xy 136.073418 57.402916)
+ (xy 135.937171 57.475742) (xy 135.89 57.514454) (xy 135.842829 57.475742) (xy 135.706582 57.402916) (xy 135.558745 57.358071)
+ (xy 135.405 57.342928) (xy 135.105 57.342928) (xy 134.951255 57.358071) (xy 134.803418 57.402916) (xy 134.667171 57.475742)
+ (xy 134.62 57.514454) (xy 134.572829 57.475742) (xy 134.436582 57.402916) (xy 134.288745 57.358071) (xy 134.135 57.342928)
+ (xy 133.835 57.342928) (xy 133.681255 57.358071) (xy 133.533418 57.402916) (xy 133.397171 57.475742) (xy 133.35 57.514454)
+ (xy 133.302829 57.475742) (xy 133.166582 57.402916) (xy 133.018745 57.358071) (xy 132.865 57.342928) (xy 132.565 57.342928)
+ (xy 132.411255 57.358071) (xy 132.263418 57.402916) (xy 132.127171 57.475742) (xy 132.08 57.514454) (xy 132.032829 57.475742)
+ (xy 131.896582 57.402916) (xy 131.748745 57.358071) (xy 131.595 57.342928) (xy 131.295 57.342928) (xy 131.141255 57.358071)
+ (xy 130.993418 57.402916) (xy 130.857171 57.475742) (xy 130.81 57.514454) (xy 130.762829 57.475742) (xy 130.626582 57.402916)
+ (xy 130.478745 57.358071) (xy 130.325 57.342928) (xy 130.025 57.342928) (xy 129.871255 57.358071) (xy 129.723418 57.402916)
+ (xy 129.587171 57.475742) (xy 129.54 57.514454) (xy 129.492829 57.475742) (xy 129.356582 57.402916) (xy 129.208745 57.358071)
+ (xy 129.055 57.342928) (xy 128.755 57.342928) (xy 128.601255 57.358071) (xy 128.453418 57.402916) (xy 128.317171 57.475742)
+ (xy 128.27 57.514454) (xy 128.222829 57.475742) (xy 128.086582 57.402916) (xy 127.938745 57.358071) (xy 127.785 57.342928)
+ (xy 127.485 57.342928) (xy 127.484407 57.342986) (xy 128.340393 56.487) (xy 140.393928 56.487) (xy 140.397 56.68875)
+ (xy 140.55575 56.8475) (xy 141.605 56.8475) (xy 141.605 56.01075) (xy 141.44625 55.852) (xy 141.032 55.848928)
+ (xy 140.907518 55.861188) (xy 140.78782 55.897498) (xy 140.677506 55.956463) (xy 140.580815 56.035815) (xy 140.501463 56.132506)
+ (xy 140.442498 56.24282) (xy 140.406188 56.362518) (xy 140.393928 56.487) (xy 128.340393 56.487) (xy 129.887194 54.9402)
+ (xy 142.494001 54.9402)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 106.807 64.389) (xy 106.827 64.389) (xy 106.827 64.643) (xy 106.807 64.643) (xy 106.807 64.663)
+ (xy 106.553 64.663) (xy 106.553 64.643) (xy 106.533 64.643) (xy 106.533 64.389) (xy 106.553 64.389)
+ (xy 106.553 64.369) (xy 106.807 64.369)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 114.317931 44.016606) (xy 114.32358 44.023489) (xy 112.27166 46.07541) (xy 112.17025 45.974) (xy 110.871 45.974)
+ (xy 110.871 47.27325) (xy 110.97241 47.37466) (xy 110.612654 47.734416) (xy 110.583578 47.758278) (xy 110.536617 47.815501)
+ (xy 110.488355 47.874308) (xy 110.4578 47.931473) (xy 110.417598 48.006686) (xy 110.392486 48.089468) (xy 110.279482 48.055188)
+ (xy 110.155 48.042928) (xy 110.14075 48.046) (xy 109.982 48.20475) (xy 109.982 49.579) (xy 110.002 49.579)
+ (xy 110.002 49.833) (xy 109.982 49.833) (xy 109.982 49.853) (xy 109.728 49.853) (xy 109.728 49.833)
+ (xy 109.07875 49.833) (xy 108.92 49.99175) (xy 108.916928 50.731) (xy 108.923704 50.7998) (xy 107.885431 50.7998)
+ (xy 105.766631 48.681) (xy 108.916928 48.681) (xy 108.92 49.42025) (xy 109.07875 49.579) (xy 109.728 49.579)
+ (xy 109.728 48.20475) (xy 109.56925 48.046) (xy 109.555 48.042928) (xy 109.430518 48.055188) (xy 109.31082 48.091498)
+ (xy 109.200506 48.150463) (xy 109.103815 48.229815) (xy 109.024463 48.326506) (xy 108.965498 48.43682) (xy 108.929188 48.556518)
+ (xy 108.916928 48.681) (xy 105.766631 48.681) (xy 105.604653 48.519023) (xy 106.094284 48.029392) (xy 106.185715 48.057128)
+ (xy 106.35775 48.074072) (xy 106.84525 48.074072) (xy 107.017285 48.057128) (xy 107.182709 48.006947) (xy 107.335164 47.925458)
+ (xy 107.468792 47.815792) (xy 107.578458 47.682164) (xy 107.659947 47.529709) (xy 107.710128 47.364285) (xy 107.727072 47.19225)
+ (xy 107.727072 47.100558) (xy 108.03063 46.797) (xy 109.155928 46.797) (xy 109.168188 46.921482) (xy 109.204498 47.04118)
+ (xy 109.263463 47.151494) (xy 109.342815 47.248185) (xy 109.439506 47.327537) (xy 109.54982 47.386502) (xy 109.669518 47.422812)
+ (xy 109.794 47.435072) (xy 110.45825 47.432) (xy 110.617 47.27325) (xy 110.617 45.974) (xy 109.31775 45.974)
+ (xy 109.159 46.13275) (xy 109.155928 46.797) (xy 108.03063 46.797) (xy 108.462351 46.365279) (xy 108.491422 46.341422)
+ (xy 108.536641 46.286322) (xy 108.586645 46.225393) (xy 108.642615 46.120679) (xy 108.657402 46.093015) (xy 108.700974 45.949378)
+ (xy 108.712 45.837426) (xy 108.712 45.837423) (xy 108.715686 45.8) (xy 108.712 45.762577) (xy 108.712 44.681672)
+ (xy 108.8136 44.681672) (xy 108.938082 44.669412) (xy 109.05778 44.633102) (xy 109.168094 44.574137) (xy 109.264785 44.494785)
+ (xy 109.344137 44.398094) (xy 109.403102 44.28778) (xy 109.418586 44.236735) (xy 109.425203 44.244797) (xy 109.520622 44.323105)
+ (xy 109.439506 44.366463) (xy 109.342815 44.445815) (xy 109.263463 44.542506) (xy 109.204498 44.65282) (xy 109.168188 44.772518)
+ (xy 109.155928 44.897) (xy 109.159 45.56125) (xy 109.31775 45.72) (xy 110.617 45.72) (xy 110.617 45.7)
+ (xy 110.871 45.7) (xy 110.871 45.72) (xy 112.17025 45.72) (xy 112.329 45.56125) (xy 112.332072 44.897)
+ (xy 112.319812 44.772518) (xy 112.283502 44.65282) (xy 112.224537 44.542506) (xy 112.145185 44.445815) (xy 112.048494 44.366463)
+ (xy 111.93818 44.307498) (xy 111.818482 44.271188) (xy 111.694 44.258928) (xy 111.536692 44.259656) (xy 111.554797 44.244797)
+ (xy 111.742069 44.016606) (xy 111.76 43.98306) (xy 111.777931 44.016606) (xy 111.965203 44.244797) (xy 112.193394 44.432069)
+ (xy 112.453736 44.571225) (xy 112.736223 44.656916) (xy 112.956381 44.6786) (xy 113.103619 44.6786) (xy 113.323777 44.656916)
+ (xy 113.606264 44.571225) (xy 113.866606 44.432069) (xy 114.094797 44.244797) (xy 114.282069 44.016606) (xy 114.3 43.98306)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 145.542 49.579) (xy 145.562 49.579) (xy 145.562 49.833) (xy 145.542 49.833) (xy 145.542 49.853)
+ (xy 145.288 49.853) (xy 145.288 49.833) (xy 145.268 49.833) (xy 145.268 49.579) (xy 145.288 49.579)
+ (xy 145.288 49.559) (xy 145.542 49.559)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 142.232385 47.646978) (xy 142.31376 47.843435) (xy 142.431898 48.020241) (xy 142.582259 48.170602) (xy 142.759065 48.28874)
+ (xy 142.955522 48.370115) (xy 143.164079 48.4116) (xy 143.376721 48.4116) (xy 143.585278 48.370115) (xy 143.781735 48.28874)
+ (xy 143.958541 48.170602) (xy 144.035043 48.0941) (xy 144.865952 48.0941) (xy 144.760506 48.150463) (xy 144.663815 48.229815)
+ (xy 144.584463 48.326506) (xy 144.525498 48.43682) (xy 144.489188 48.556518) (xy 144.476928 48.681) (xy 144.479433 49.283754)
+ (xy 144.416321 49.2712) (xy 144.203679 49.2712) (xy 143.995122 49.312685) (xy 143.798665 49.39406) (xy 143.621859 49.512198)
+ (xy 143.561644 49.572413) (xy 141.51333 47.5241) (xy 142.207943 47.5241)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 145.287998 48.204748) (xy 145.17735 48.0941) (xy 145.287998 48.0941)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 145.542002 48.204748) (xy 145.542002 48.0941) (xy 145.65265 48.0941)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 138.557 43.053) (xy 138.577 43.053) (xy 138.577 43.307) (xy 138.557 43.307) (xy 138.557 43.327)
+ (xy 138.303 43.327) (xy 138.303 43.307) (xy 138.283 43.307) (xy 138.283 43.053) (xy 138.303 43.053)
+ (xy 138.303 43.033) (xy 138.557 43.033)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 111.823183 41.528488) (xy 112.019707 41.746854) (xy 112.233433 41.90653) (xy 112.193394 41.927931) (xy 111.965203 42.115203)
+ (xy 111.777931 42.343394) (xy 111.76 42.37694) (xy 111.742069 42.343394) (xy 111.554797 42.115203) (xy 111.326606 41.927931)
+ (xy 111.29306 41.91) (xy 111.326606 41.892069) (xy 111.554797 41.704797) (xy 111.742069 41.476606) (xy 111.765863 41.43209)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 121.968006 41.502964) (xy 121.517602 41.953368) (xy 121.486606 41.927931) (xy 121.45306 41.91) (xy 121.486606 41.892069)
+ (xy 121.714797 41.704797) (xy 121.902069 41.476606) (xy 121.925863 41.43209)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.157 40.513) (xy 113.177 40.513) (xy 113.177 40.767) (xy 113.157 40.767) (xy 113.157 40.787)
+ (xy 112.903 40.787) (xy 112.903 40.767) (xy 112.883 40.767) (xy 112.883 40.513) (xy 112.903 40.513)
+ (xy 112.903 40.493) (xy 113.157 40.493)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 123.317 40.513) (xy 123.337 40.513) (xy 123.337 40.767) (xy 123.317 40.767) (xy 123.317 40.787)
+ (xy 123.063 40.787) (xy 123.063 40.767) (xy 123.043 40.767) (xy 123.043 40.513) (xy 123.063 40.513)
+ (xy 123.063 40.493) (xy 123.317 40.493)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 132.7205 39.27723) (xy 132.513394 39.387931) (xy 132.285203 39.575203) (xy 132.097931 39.803394) (xy 132.074137 39.84791)
+ (xy 132.016817 39.751512) (xy 131.820293 39.533146) (xy 131.584944 39.357316) (xy 131.319814 39.230778) (xy 131.169026 39.185042)
+ (xy 130.937 39.306183) (xy 130.937 40.513) (xy 130.957 40.513) (xy 130.957 40.767) (xy 130.937 40.767)
+ (xy 130.937 40.787) (xy 130.683 40.787) (xy 130.683 40.767) (xy 130.663 40.767) (xy 130.663 40.513)
+ (xy 130.683 40.513) (xy 130.683 39.306183) (xy 130.450974 39.185042) (xy 130.300186 39.230778) (xy 130.035056 39.357316)
+ (xy 129.941352 39.427322) (xy 129.63483 39.1208) (xy 132.56407 39.1208)
+ )
+ )
+ )
+ (zone (net 2) (net_name GND) (layer B.Cu) (tstamp 5D22266B) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 84.25 36.25) (xy 166.75 36.25) (xy 166.75 71.25) (xy 84.25 71.25)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 162.157663 36.703744) (xy 162.309322 36.749532) (xy 162.449195 36.823905) (xy 162.571961 36.92403) (xy 162.672941 37.046094)
+ (xy 162.748291 37.18545) (xy 162.795136 37.336781) (xy 162.815 37.525783) (xy 162.815 39.873293) (xy 162.780113 39.838406)
+ (xy 162.343298 39.546536) (xy 161.857935 39.345492) (xy 161.342677 39.243) (xy 160.817323 39.243) (xy 160.302065 39.345492)
+ (xy 159.816702 39.546536) (xy 159.379887 39.838406) (xy 159.008406 40.209887) (xy 158.716536 40.646702) (xy 158.515492 41.132065)
+ (xy 158.413 41.647323) (xy 158.413 42.172677) (xy 158.515492 42.687935) (xy 158.716536 43.173298) (xy 159.008406 43.610113)
+ (xy 159.379887 43.981594) (xy 159.816702 44.273464) (xy 160.302065 44.474508) (xy 160.817323 44.577) (xy 161.342677 44.577)
+ (xy 161.857935 44.474508) (xy 162.343298 44.273464) (xy 162.780113 43.981594) (xy 162.815 43.946707) (xy 162.815001 59.033647)
+ (xy 162.817921 59.063291) (xy 162.817856 59.072554) (xy 162.818789 59.082073) (xy 162.849389 59.373218) (xy 162.861877 59.434055)
+ (xy 162.873507 59.495021) (xy 162.876271 59.504177) (xy 162.962839 59.783833) (xy 162.986896 59.841062) (xy 163.010156 59.898632)
+ (xy 163.014646 59.907077) (xy 163.153885 60.164593) (xy 163.188604 60.216065) (xy 163.222597 60.268012) (xy 163.228642 60.275424)
+ (xy 163.415247 60.500991) (xy 163.459301 60.544738) (xy 163.502739 60.589096) (xy 163.510109 60.595193) (xy 163.736973 60.780219)
+ (xy 163.788691 60.81458) (xy 163.839912 60.849652) (xy 163.848325 60.854201) (xy 164.106806 60.991638) (xy 164.164242 61.015312)
+ (xy 164.22127 61.039754) (xy 164.230407 61.042583) (xy 164.510661 61.127197) (xy 164.571577 61.139259) (xy 164.632293 61.152164)
+ (xy 164.641804 61.153164) (xy 164.933156 61.181731) (xy 164.933163 61.181731) (xy 164.966353 61.185) (xy 165.466496 61.185)
+ (xy 165.657663 61.203744) (xy 165.809322 61.249532) (xy 165.949195 61.323905) (xy 166.071961 61.42403) (xy 166.172941 61.546094)
+ (xy 166.248291 61.68545) (xy 166.295136 61.836781) (xy 166.315 62.025783) (xy 166.315001 70.815) (xy 152.25863 70.815)
+ (xy 154.565271 68.50836) (xy 154.646223 68.532916) (xy 154.866381 68.5546) (xy 155.013619 68.5546) (xy 155.233777 68.532916)
+ (xy 155.516264 68.447225) (xy 155.776606 68.308069) (xy 156.004797 68.120797) (xy 156.192069 67.892606) (xy 156.21 67.85906)
+ (xy 156.227931 67.892606) (xy 156.415203 68.120797) (xy 156.643394 68.308069) (xy 156.903736 68.447225) (xy 157.186223 68.532916)
+ (xy 157.406381 68.5546) (xy 157.553619 68.5546) (xy 157.773777 68.532916) (xy 158.056264 68.447225) (xy 158.316606 68.308069)
+ (xy 158.544797 68.120797) (xy 158.732069 67.892606) (xy 158.75 67.85906) (xy 158.767931 67.892606) (xy 158.955203 68.120797)
+ (xy 159.183394 68.308069) (xy 159.443736 68.447225) (xy 159.726223 68.532916) (xy 159.946381 68.5546) (xy 160.093619 68.5546)
+ (xy 160.313777 68.532916) (xy 160.596264 68.447225) (xy 160.856606 68.308069) (xy 161.084797 68.120797) (xy 161.272069 67.892606)
+ (xy 161.29 67.85906) (xy 161.307931 67.892606) (xy 161.495203 68.120797) (xy 161.723394 68.308069) (xy 161.983736 68.447225)
+ (xy 162.266223 68.532916) (xy 162.486381 68.5546) (xy 162.633619 68.5546) (xy 162.853777 68.532916) (xy 163.136264 68.447225)
+ (xy 163.396606 68.308069) (xy 163.624797 68.120797) (xy 163.812069 67.892606) (xy 163.951225 67.632264) (xy 164.036916 67.349777)
+ (xy 164.065851 67.056) (xy 164.036916 66.762223) (xy 163.951225 66.479736) (xy 163.812069 66.219394) (xy 163.624797 65.991203)
+ (xy 163.396606 65.803931) (xy 163.356567 65.78253) (xy 163.570293 65.622854) (xy 163.766817 65.404488) (xy 163.916964 65.151978)
+ (xy 164.014963 64.875027) (xy 163.894464 64.643) (xy 162.687 64.643) (xy 162.687 64.663) (xy 162.433 64.663)
+ (xy 162.433 64.643) (xy 162.413 64.643) (xy 162.413 64.389) (xy 162.433 64.389) (xy 162.433 63.182183)
+ (xy 162.687 63.182183) (xy 162.687 64.389) (xy 163.894464 64.389) (xy 164.014963 64.156973) (xy 163.916964 63.880022)
+ (xy 163.766817 63.627512) (xy 163.570293 63.409146) (xy 163.334944 63.233316) (xy 163.069814 63.106778) (xy 162.919026 63.061042)
+ (xy 162.687 63.182183) (xy 162.433 63.182183) (xy 162.200974 63.061042) (xy 162.050186 63.106778) (xy 161.785056 63.233316)
+ (xy 161.549707 63.409146) (xy 161.353183 63.627512) (xy 161.295863 63.72391) (xy 161.272069 63.679394) (xy 161.084797 63.451203)
+ (xy 160.856606 63.263931) (xy 160.596264 63.124775) (xy 160.313777 63.039084) (xy 160.093619 63.0174) (xy 159.946381 63.0174)
+ (xy 159.726223 63.039084) (xy 159.443736 63.124775) (xy 159.183394 63.263931) (xy 159.119719 63.316188) (xy 156.004284 60.200754)
+ (xy 155.980422 60.171678) (xy 155.864392 60.076455) (xy 155.732015 60.005698) (xy 155.588378 59.962126) (xy 155.476426 59.9511)
+ (xy 155.476423 59.9511) (xy 155.439 59.947414) (xy 155.401577 59.9511) (xy 123.051436 59.9511) (xy 123.136141 59.894502)
+ (xy 123.286502 59.744141) (xy 123.40464 59.567335) (xy 123.486015 59.370878) (xy 123.5275 59.162321) (xy 123.5275 58.949679)
+ (xy 123.486015 58.741122) (xy 123.40464 58.544665) (xy 123.286502 58.367859) (xy 123.136141 58.217498) (xy 122.959335 58.09936)
+ (xy 122.762878 58.017985) (xy 122.554321 57.9765) (xy 122.553894 57.9765) (xy 120.147811 55.570418) (xy 120.121564 55.538436)
+ (xy 119.993932 55.433691) (xy 119.848317 55.355858) (xy 119.690316 55.307929) (xy 119.56717 55.2958) (xy 119.567163 55.2958)
+ (xy 119.526 55.291746) (xy 119.484837 55.2958) (xy 106.5022 55.2958) (xy 106.5022 46.797) (xy 109.155928 46.797)
+ (xy 109.168188 46.921482) (xy 109.204498 47.04118) (xy 109.263463 47.151494) (xy 109.342815 47.248185) (xy 109.439506 47.327537)
+ (xy 109.54982 47.386502) (xy 109.669518 47.422812) (xy 109.794 47.435072) (xy 110.45825 47.432) (xy 110.617 47.27325)
+ (xy 110.617 45.974) (xy 110.871 45.974) (xy 110.871 47.27325) (xy 111.02975 47.432) (xy 111.694 47.435072)
+ (xy 111.818482 47.422812) (xy 111.93818 47.386502) (xy 112.048494 47.327537) (xy 112.145185 47.248185) (xy 112.224537 47.151494)
+ (xy 112.283502 47.04118) (xy 112.319812 46.921482) (xy 112.332072 46.797) (xy 112.329 46.13275) (xy 112.17025 45.974)
+ (xy 110.871 45.974) (xy 110.617 45.974) (xy 109.31775 45.974) (xy 109.159 46.13275) (xy 109.155928 46.797)
+ (xy 106.5022 46.797) (xy 106.5022 44.297699) (xy 106.555863 44.398094) (xy 106.635215 44.494785) (xy 106.731906 44.574137)
+ (xy 106.84222 44.633102) (xy 106.961918 44.669412) (xy 107.0864 44.681672) (xy 108.8136 44.681672) (xy 108.938082 44.669412)
+ (xy 109.05778 44.633102) (xy 109.168094 44.574137) (xy 109.264785 44.494785) (xy 109.344137 44.398094) (xy 109.403102 44.28778)
+ (xy 109.418586 44.236735) (xy 109.425203 44.244797) (xy 109.520622 44.323105) (xy 109.439506 44.366463) (xy 109.342815 44.445815)
+ (xy 109.263463 44.542506) (xy 109.204498 44.65282) (xy 109.168188 44.772518) (xy 109.155928 44.897) (xy 109.159 45.56125)
+ (xy 109.31775 45.72) (xy 110.617 45.72) (xy 110.617 45.7) (xy 110.871 45.7) (xy 110.871 45.72)
+ (xy 112.17025 45.72) (xy 112.329 45.56125) (xy 112.330117 45.319648) (xy 117.878342 50.867873) (xy 117.902199 50.896943)
+ (xy 118.018229 50.992166) (xy 118.150606 51.062923) (xy 118.294243 51.106495) (xy 118.406195 51.117521) (xy 118.406197 51.117521)
+ (xy 118.44362 51.121207) (xy 118.481043 51.117521) (xy 125.112666 51.117521) (xy 125.150089 51.121207) (xy 125.187512 51.117521)
+ (xy 125.187515 51.117521) (xy 125.236465 51.1127) (xy 137.201872 51.1127) (xy 137.192585 51.135122) (xy 137.1511 51.343679)
+ (xy 137.1511 51.556321) (xy 137.192585 51.764878) (xy 137.27396 51.961335) (xy 137.392098 52.138141) (xy 137.542459 52.288502)
+ (xy 137.719265 52.40664) (xy 137.915722 52.488015) (xy 138.124279 52.5295) (xy 138.336921 52.5295) (xy 138.545478 52.488015)
+ (xy 138.741935 52.40664) (xy 138.918741 52.288502) (xy 139.003443 52.2038) (xy 149.690077 52.2038) (xy 149.7275 52.207486)
+ (xy 149.764923 52.2038) (xy 149.764926 52.2038) (xy 149.876878 52.192774) (xy 150.020515 52.149202) (xy 150.152892 52.078445)
+ (xy 150.268922 51.983222) (xy 150.292784 51.954146) (xy 158.019753 44.227178) (xy 158.048822 44.203322) (xy 158.144045 44.087292)
+ (xy 158.214802 43.954915) (xy 158.258374 43.811278) (xy 158.2694 43.699326) (xy 158.2694 43.699324) (xy 158.273086 43.661901)
+ (xy 158.2694 43.624478) (xy 158.2694 42.743723) (xy 158.273086 42.7063) (xy 158.268622 42.660973) (xy 158.258374 42.556922)
+ (xy 158.214802 42.413285) (xy 158.178882 42.346083) (xy 158.144045 42.280907) (xy 158.072679 42.193948) (xy 158.048822 42.164878)
+ (xy 158.019751 42.14102) (xy 157.413959 41.535228) (xy 157.462069 41.476606) (xy 157.601225 41.216264) (xy 157.686916 40.933777)
+ (xy 157.715851 40.64) (xy 157.686916 40.346223) (xy 157.601225 40.063736) (xy 157.462069 39.803394) (xy 157.274797 39.575203)
+ (xy 157.046606 39.387931) (xy 156.786264 39.248775) (xy 156.503777 39.163084) (xy 156.283619 39.1414) (xy 156.136381 39.1414)
+ (xy 155.916223 39.163084) (xy 155.633736 39.248775) (xy 155.373394 39.387931) (xy 155.145203 39.575203) (xy 154.957931 39.803394)
+ (xy 154.94 39.83694) (xy 154.922069 39.803394) (xy 154.734797 39.575203) (xy 154.506606 39.387931) (xy 154.246264 39.248775)
+ (xy 153.963777 39.163084) (xy 153.743619 39.1414) (xy 153.596381 39.1414) (xy 153.376223 39.163084) (xy 153.093736 39.248775)
+ (xy 152.833394 39.387931) (xy 152.605203 39.575203) (xy 152.417931 39.803394) (xy 152.4 39.83694) (xy 152.382069 39.803394)
+ (xy 152.194797 39.575203) (xy 151.966606 39.387931) (xy 151.706264 39.248775) (xy 151.423777 39.163084) (xy 151.203619 39.1414)
+ (xy 151.056381 39.1414) (xy 150.836223 39.163084) (xy 150.553736 39.248775) (xy 150.293394 39.387931) (xy 150.065203 39.575203)
+ (xy 149.877931 39.803394) (xy 149.854137 39.84791) (xy 149.796817 39.751512) (xy 149.600293 39.533146) (xy 149.364944 39.357316)
+ (xy 149.099814 39.230778) (xy 148.949026 39.185042) (xy 148.717 39.306183) (xy 148.717 40.513) (xy 148.737 40.513)
+ (xy 148.737 40.767) (xy 148.717 40.767) (xy 148.717 40.787) (xy 148.463 40.787) (xy 148.463 40.767)
+ (xy 148.443 40.767) (xy 148.443 40.513) (xy 148.463 40.513) (xy 148.463 39.306183) (xy 148.230974 39.185042)
+ (xy 148.080186 39.230778) (xy 147.815056 39.357316) (xy 147.579707 39.533146) (xy 147.383183 39.751512) (xy 147.325863 39.84791)
+ (xy 147.302069 39.803394) (xy 147.114797 39.575203) (xy 146.886606 39.387931) (xy 146.626264 39.248775) (xy 146.343777 39.163084)
+ (xy 146.123619 39.1414) (xy 145.976381 39.1414) (xy 145.756223 39.163084) (xy 145.473736 39.248775) (xy 145.213394 39.387931)
+ (xy 144.985203 39.575203) (xy 144.797931 39.803394) (xy 144.78 39.83694) (xy 144.762069 39.803394) (xy 144.574797 39.575203)
+ (xy 144.346606 39.387931) (xy 144.086264 39.248775) (xy 143.803777 39.163084) (xy 143.583619 39.1414) (xy 143.436381 39.1414)
+ (xy 143.216223 39.163084) (xy 142.933736 39.248775) (xy 142.673394 39.387931) (xy 142.445203 39.575203) (xy 142.257931 39.803394)
+ (xy 142.24 39.83694) (xy 142.222069 39.803394) (xy 142.034797 39.575203) (xy 141.806606 39.387931) (xy 141.546264 39.248775)
+ (xy 141.263777 39.163084) (xy 141.043619 39.1414) (xy 140.896381 39.1414) (xy 140.676223 39.163084) (xy 140.393736 39.248775)
+ (xy 140.133394 39.387931) (xy 139.905203 39.575203) (xy 139.717931 39.803394) (xy 139.7 39.83694) (xy 139.682069 39.803394)
+ (xy 139.494797 39.575203) (xy 139.266606 39.387931) (xy 139.006264 39.248775) (xy 138.723777 39.163084) (xy 138.503619 39.1414)
+ (xy 138.356381 39.1414) (xy 138.136223 39.163084) (xy 137.853736 39.248775) (xy 137.593394 39.387931) (xy 137.365203 39.575203)
+ (xy 137.177931 39.803394) (xy 137.16 39.83694) (xy 137.142069 39.803394) (xy 136.954797 39.575203) (xy 136.726606 39.387931)
+ (xy 136.466264 39.248775) (xy 136.183777 39.163084) (xy 135.963619 39.1414) (xy 135.816381 39.1414) (xy 135.596223 39.163084)
+ (xy 135.313736 39.248775) (xy 135.053394 39.387931) (xy 134.825203 39.575203) (xy 134.637931 39.803394) (xy 134.62 39.83694)
+ (xy 134.602069 39.803394) (xy 134.414797 39.575203) (xy 134.186606 39.387931) (xy 133.926264 39.248775) (xy 133.643777 39.163084)
+ (xy 133.423619 39.1414) (xy 133.276381 39.1414) (xy 133.056223 39.163084) (xy 132.773736 39.248775) (xy 132.513394 39.387931)
+ (xy 132.285203 39.575203) (xy 132.097931 39.803394) (xy 132.074137 39.84791) (xy 132.016817 39.751512) (xy 131.820293 39.533146)
+ (xy 131.584944 39.357316) (xy 131.319814 39.230778) (xy 131.169026 39.185042) (xy 130.937 39.306183) (xy 130.937 40.513)
+ (xy 130.957 40.513) (xy 130.957 40.767) (xy 130.937 40.767) (xy 130.937 40.787) (xy 130.683 40.787)
+ (xy 130.683 40.767) (xy 130.663 40.767) (xy 130.663 40.513) (xy 130.683 40.513) (xy 130.683 39.306183)
+ (xy 130.450974 39.185042) (xy 130.300186 39.230778) (xy 130.035056 39.357316) (xy 129.799707 39.533146) (xy 129.603183 39.751512)
+ (xy 129.545863 39.84791) (xy 129.522069 39.803394) (xy 129.334797 39.575203) (xy 129.106606 39.387931) (xy 128.846264 39.248775)
+ (xy 128.563777 39.163084) (xy 128.343619 39.1414) (xy 128.196381 39.1414) (xy 127.976223 39.163084) (xy 127.693736 39.248775)
+ (xy 127.433394 39.387931) (xy 127.205203 39.575203) (xy 127.017931 39.803394) (xy 127 39.83694) (xy 126.982069 39.803394)
+ (xy 126.794797 39.575203) (xy 126.566606 39.387931) (xy 126.306264 39.248775) (xy 126.023777 39.163084) (xy 125.803619 39.1414)
+ (xy 125.656381 39.1414) (xy 125.436223 39.163084) (xy 125.153736 39.248775) (xy 124.893394 39.387931) (xy 124.665203 39.575203)
+ (xy 124.477931 39.803394) (xy 124.454137 39.84791) (xy 124.396817 39.751512) (xy 124.200293 39.533146) (xy 123.964944 39.357316)
+ (xy 123.699814 39.230778) (xy 123.549026 39.185042) (xy 123.317 39.306183) (xy 123.317 40.513) (xy 123.337 40.513)
+ (xy 123.337 40.767) (xy 123.317 40.767) (xy 123.317 40.787) (xy 123.063 40.787) (xy 123.063 40.767)
+ (xy 123.043 40.767) (xy 123.043 40.513) (xy 123.063 40.513) (xy 123.063 39.306183) (xy 122.830974 39.185042)
+ (xy 122.680186 39.230778) (xy 122.415056 39.357316) (xy 122.29737 39.445239) (xy 121.734784 38.882653) (xy 121.710922 38.853578)
+ (xy 121.594892 38.758355) (xy 121.462515 38.687598) (xy 121.318878 38.644026) (xy 121.206926 38.633) (xy 121.206923 38.633)
+ (xy 121.1695 38.629314) (xy 121.132077 38.633) (xy 100.444722 38.633) (xy 100.407299 38.629314) (xy 100.369876 38.633)
+ (xy 100.369874 38.633) (xy 100.257922 38.644026) (xy 100.114285 38.687598) (xy 99.981908 38.758355) (xy 99.865878 38.853578)
+ (xy 99.842021 38.882648) (xy 94.20987 44.5148) (xy 94.101679 44.5148) (xy 93.893122 44.556285) (xy 93.696665 44.63766)
+ (xy 93.5482 44.736861) (xy 93.5482 44.23331) (xy 93.634482 44.224812) (xy 93.75418 44.188502) (xy 93.864494 44.129537)
+ (xy 93.961185 44.050185) (xy 94.040537 43.953494) (xy 94.099502 43.84318) (xy 94.135812 43.723482) (xy 94.148072 43.599)
+ (xy 94.148072 41.999) (xy 94.135812 41.874518) (xy 94.099502 41.75482) (xy 94.040537 41.644506) (xy 93.961185 41.547815)
+ (xy 93.864494 41.468463) (xy 93.75418 41.409498) (xy 93.634482 41.373188) (xy 93.51 41.360928) (xy 93.502785 41.360928)
+ (xy 93.523097 41.291702) (xy 92.71 40.478605) (xy 91.896903 41.291702) (xy 91.917215 41.360928) (xy 91.91 41.360928)
+ (xy 91.785518 41.373188) (xy 91.66582 41.409498) (xy 91.555506 41.468463) (xy 91.458815 41.547815) (xy 91.379463 41.644506)
+ (xy 91.320498 41.75482) (xy 91.284188 41.874518) (xy 91.271928 41.999) (xy 91.271928 43.599) (xy 91.284188 43.723482)
+ (xy 91.320498 43.84318) (xy 91.379463 43.953494) (xy 91.458815 44.050185) (xy 91.555506 44.129537) (xy 91.66582 44.188502)
+ (xy 91.785518 44.224812) (xy 91.871801 44.23331) (xy 91.871801 44.864805) (xy 90.330807 46.4058) (xy 89.911854 46.4058)
+ (xy 89.886686 46.322832) (xy 89.725579 46.021422) (xy 89.508766 45.757234) (xy 89.244578 45.540421) (xy 88.943168 45.379314)
+ (xy 88.616119 45.280105) (xy 88.361225 45.255) (xy 86.390775 45.255) (xy 86.135881 45.280105) (xy 85.808832 45.379314)
+ (xy 85.507422 45.540421) (xy 85.243234 45.757234) (xy 85.026421 46.021422) (xy 84.865314 46.322832) (xy 84.766105 46.649881)
+ (xy 84.732606 46.99) (xy 84.766105 47.330119) (xy 84.865314 47.657168) (xy 85.026421 47.958578) (xy 85.243234 48.222766)
+ (xy 85.507422 48.439579) (xy 85.808832 48.600686) (xy 86.135881 48.699895) (xy 86.390775 48.725) (xy 88.361225 48.725)
+ (xy 88.616119 48.699895) (xy 88.943168 48.600686) (xy 89.244578 48.439579) (xy 89.508766 48.222766) (xy 89.624125 48.0822)
+ (xy 90.636837 48.0822) (xy 90.678 48.086254) (xy 90.719163 48.0822) (xy 90.76383 48.0822) (xy 90.805 48.086255)
+ (xy 90.84617 48.0822) (xy 102.320837 48.0822) (xy 102.362 48.086254) (xy 102.403163 48.0822) (xy 102.40317 48.0822)
+ (xy 102.526316 48.070071) (xy 102.684317 48.022142) (xy 102.829932 47.944309) (xy 102.957564 47.839564) (xy 102.983811 47.807582)
+ (xy 104.8258 45.965593) (xy 104.8258 47.285169) (xy 104.825801 47.285179) (xy 104.8258 56.09283) (xy 104.821745 56.134)
+ (xy 104.825801 56.17518) (xy 104.8258 57.304107) (xy 104.553607 57.5763) (xy 104.553179 57.5763) (xy 104.344622 57.617785)
+ (xy 104.148165 57.69916) (xy 103.971359 57.817298) (xy 103.820998 57.967659) (xy 103.70286 58.144465) (xy 103.621485 58.340922)
+ (xy 103.58 58.549479) (xy 103.58 58.762121) (xy 103.621485 58.970678) (xy 103.70286 59.167135) (xy 103.820998 59.343941)
+ (xy 103.971359 59.494302) (xy 104.148165 59.61244) (xy 104.218585 59.641609) (xy 103.916194 59.944) (xy 97.089631 59.944)
+ (xy 90.735284 53.589654) (xy 90.711422 53.560578) (xy 90.595392 53.465355) (xy 90.554072 53.443269) (xy 90.554072 53.086)
+ (xy 90.541812 52.961518) (xy 90.505502 52.84182) (xy 90.446537 52.731506) (xy 90.367185 52.634815) (xy 90.270494 52.555463)
+ (xy 90.16018 52.496498) (xy 90.040482 52.460188) (xy 89.916 52.447928) (xy 88.814238 52.447928) (xy 89.057288 52.35433)
+ (xy 89.345511 52.172042) (xy 89.592633 51.937027) (xy 89.789157 51.658317) (xy 89.927531 51.346622) (xy 89.965175 51.196122)
+ (xy 89.847125 50.927) (xy 87.503 50.927) (xy 87.503 50.947) (xy 87.249 50.947) (xy 87.249 50.927)
+ (xy 84.904875 50.927) (xy 84.786825 51.196122) (xy 84.824469 51.346622) (xy 84.962843 51.658317) (xy 85.159367 51.937027)
+ (xy 85.406489 52.172042) (xy 85.694712 52.35433) (xy 85.937762 52.447928) (xy 85.344 52.447928) (xy 85.219518 52.460188)
+ (xy 85.09982 52.496498) (xy 84.989506 52.555463) (xy 84.892815 52.634815) (xy 84.813463 52.731506) (xy 84.754498 52.84182)
+ (xy 84.718188 52.961518) (xy 84.705928 53.086) (xy 84.705928 55.118) (xy 84.718188 55.242482) (xy 84.754498 55.36218)
+ (xy 84.813463 55.472494) (xy 84.892815 55.569185) (xy 84.989506 55.648537) (xy 85.025364 55.667704) (xy 84.896903 55.859958)
+ (xy 84.772447 56.160421) (xy 84.709 56.479391) (xy 84.709 56.804609) (xy 84.751027 57.015891) (xy 84.740807 57.021354)
+ (xy 84.685 57.067153) (xy 84.685 50.403878) (xy 84.786825 50.403878) (xy 84.904875 50.673) (xy 87.249 50.673)
+ (xy 87.249 49.065) (xy 87.503 49.065) (xy 87.503 50.673) (xy 89.847125 50.673) (xy 89.965175 50.403878)
+ (xy 89.927531 50.253378) (xy 89.789157 49.941683) (xy 89.592633 49.662973) (xy 89.345511 49.427958) (xy 89.057288 49.24567)
+ (xy 88.739041 49.123114) (xy 88.403 49.065) (xy 87.503 49.065) (xy 87.249 49.065) (xy 86.349 49.065)
+ (xy 86.012959 49.123114) (xy 85.694712 49.24567) (xy 85.406489 49.427958) (xy 85.159367 49.662973) (xy 84.962843 49.941683)
+ (xy 84.824469 50.253378) (xy 84.786825 50.403878) (xy 84.685 50.403878) (xy 84.685 40.369512) (xy 91.269783 40.369512)
+ (xy 91.311213 40.64913) (xy 91.406397 40.915292) (xy 91.473329 41.040514) (xy 91.717298 41.112097) (xy 92.530395 40.299)
+ (xy 92.889605 40.299) (xy 93.702702 41.112097) (xy 93.946671 41.040514) (xy 94.067571 40.785004) (xy 94.1363 40.510816)
+ (xy 94.150217 40.228488) (xy 94.108787 39.94887) (xy 94.013603 39.682708) (xy 93.946671 39.557486) (xy 93.702702 39.485903)
+ (xy 92.889605 40.299) (xy 92.530395 40.299) (xy 91.717298 39.485903) (xy 91.473329 39.557486) (xy 91.352429 39.812996)
+ (xy 91.2837 40.087184) (xy 91.269783 40.369512) (xy 84.685 40.369512) (xy 84.685 39.306298) (xy 91.896903 39.306298)
+ (xy 92.71 40.119395) (xy 93.523097 39.306298) (xy 93.451514 39.062329) (xy 93.196004 38.941429) (xy 92.921816 38.8727)
+ (xy 92.639488 38.858783) (xy 92.35987 38.900213) (xy 92.093708 38.995397) (xy 91.968486 39.062329) (xy 91.896903 39.306298)
+ (xy 84.685 39.306298) (xy 84.685 37.533504) (xy 84.703744 37.342337) (xy 84.749532 37.190678) (xy 84.823905 37.050805)
+ (xy 84.92403 36.928039) (xy 85.046094 36.827059) (xy 85.18545 36.751709) (xy 85.336781 36.704864) (xy 85.525782 36.685)
+ (xy 161.966496 36.685)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 161.353183 65.404488) (xy 161.549707 65.622854) (xy 161.763433 65.78253) (xy 161.723394 65.803931) (xy 161.495203 65.991203)
+ (xy 161.307931 66.219394) (xy 161.29 66.25294) (xy 161.272069 66.219394) (xy 161.084797 65.991203) (xy 160.856606 65.803931)
+ (xy 160.82306 65.786) (xy 160.856606 65.768069) (xy 161.084797 65.580797) (xy 161.272069 65.352606) (xy 161.295863 65.30809)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 151.738568 63.170298) (xy 151.563394 63.263931) (xy 151.335203 63.451203) (xy 151.147931 63.679394) (xy 151.13 63.71294)
+ (xy 151.112069 63.679394) (xy 150.924797 63.451203) (xy 150.696606 63.263931) (xy 150.436264 63.124775) (xy 150.153777 63.039084)
+ (xy 149.933619 63.0174) (xy 149.786381 63.0174) (xy 149.566223 63.039084) (xy 149.283736 63.124775) (xy 149.023394 63.263931)
+ (xy 148.795203 63.451203) (xy 148.607931 63.679394) (xy 148.59 63.71294) (xy 148.572069 63.679394) (xy 148.384797 63.451203)
+ (xy 148.156606 63.263931) (xy 147.896264 63.124775) (xy 147.613777 63.039084) (xy 147.393619 63.0174) (xy 147.246381 63.0174)
+ (xy 147.026223 63.039084) (xy 146.743736 63.124775) (xy 146.483394 63.263931) (xy 146.255203 63.451203) (xy 146.067931 63.679394)
+ (xy 146.05 63.71294) (xy 146.032069 63.679394) (xy 145.844797 63.451203) (xy 145.616606 63.263931) (xy 145.356264 63.124775)
+ (xy 145.073777 63.039084) (xy 144.853619 63.0174) (xy 144.706381 63.0174) (xy 144.486223 63.039084) (xy 144.203736 63.124775)
+ (xy 143.943394 63.263931) (xy 143.715203 63.451203) (xy 143.527931 63.679394) (xy 143.388775 63.939736) (xy 143.303084 64.222223)
+ (xy 143.274149 64.516) (xy 143.303084 64.809777) (xy 143.375772 65.049399) (xy 136.013262 65.049399) (xy 136.074963 64.875027)
+ (xy 135.954464 64.643) (xy 134.747 64.643) (xy 134.747 64.663) (xy 134.493 64.663) (xy 134.493 64.643)
+ (xy 134.473 64.643) (xy 134.473 64.389) (xy 134.493 64.389) (xy 134.493 63.182183) (xy 134.747 63.182183)
+ (xy 134.747 64.389) (xy 135.954464 64.389) (xy 136.074963 64.156973) (xy 135.976964 63.880022) (xy 135.826817 63.627512)
+ (xy 135.630293 63.409146) (xy 135.394944 63.233316) (xy 135.129814 63.106778) (xy 134.979026 63.061042) (xy 134.747 63.182183)
+ (xy 134.493 63.182183) (xy 134.260974 63.061042) (xy 134.110186 63.106778) (xy 133.845056 63.233316) (xy 133.609707 63.409146)
+ (xy 133.413183 63.627512) (xy 133.355863 63.72391) (xy 133.332069 63.679394) (xy 133.144797 63.451203) (xy 132.916606 63.263931)
+ (xy 132.656264 63.124775) (xy 132.373777 63.039084) (xy 132.153619 63.0174) (xy 132.006381 63.0174) (xy 131.786223 63.039084)
+ (xy 131.503736 63.124775) (xy 131.243394 63.263931) (xy 131.206632 63.294101) (xy 130.21353 62.301) (xy 150.86927 62.301)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 110.532859 61.606302) (xy 110.709665 61.72444) (xy 110.906122 61.805815) (xy 111.114679 61.8473) (xy 111.327321 61.8473)
+ (xy 111.535878 61.805815) (xy 111.732335 61.72444) (xy 111.909141 61.606302) (xy 111.985643 61.5298) (xy 115.85557 61.5298)
+ (xy 115.9781 61.652331) (xy 115.9781 61.948277) (xy 115.974414 61.9857) (xy 115.9781 62.023123) (xy 115.9781 62.023126)
+ (xy 115.989126 62.135078) (xy 116.032698 62.278715) (xy 116.053689 62.317985) (xy 116.103455 62.411092) (xy 116.162679 62.483256)
+ (xy 116.198679 62.527122) (xy 116.227749 62.550979) (xy 116.700645 63.023875) (xy 116.546223 63.039084) (xy 116.263736 63.124775)
+ (xy 116.003394 63.263931) (xy 115.775203 63.451203) (xy 115.587931 63.679394) (xy 115.448775 63.939736) (xy 115.363084 64.222223)
+ (xy 115.334149 64.516) (xy 115.363084 64.809777) (xy 115.420363 64.998601) (xy 108.091236 64.998601) (xy 108.134963 64.875027)
+ (xy 108.014931 64.6439) (xy 108.046821 64.6439) (xy 108.051336 64.643002) (xy 108.1786 64.643002) (xy 108.1786 64.617687)
+ (xy 108.255378 64.602415) (xy 108.451835 64.52104) (xy 108.628641 64.402902) (xy 108.779002 64.252541) (xy 108.89714 64.075735)
+ (xy 108.978515 63.879278) (xy 109.02 63.670721) (xy 109.02 63.458079) (xy 108.978515 63.249522) (xy 108.89714 63.053065)
+ (xy 108.779002 62.876259) (xy 108.628641 62.725898) (xy 108.451835 62.60776) (xy 108.255378 62.526385) (xy 108.046821 62.4849)
+ (xy 107.923396 62.4849) (xy 107.921393 62.483256) (xy 107.789016 62.412499) (xy 107.645379 62.368927) (xy 107.533427 62.357901)
+ (xy 107.533424 62.357901) (xy 107.496001 62.354215) (xy 107.458578 62.357901) (xy 102.142304 62.357901) (xy 102.130015 62.296122)
+ (xy 102.04864 62.099665) (xy 101.966016 61.97601) (xy 104.404825 61.97601) (xy 104.442248 61.979696) (xy 104.479671 61.97601)
+ (xy 104.479674 61.97601) (xy 104.591626 61.964984) (xy 104.735263 61.921412) (xy 104.86764 61.850655) (xy 104.98367 61.755432)
+ (xy 105.007532 61.726356) (xy 105.204088 61.5298) (xy 110.456357 61.5298)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 106.807 64.389) (xy 106.827 64.389) (xy 106.827 64.643) (xy 106.807 64.643) (xy 106.807 64.663)
+ (xy 106.553 64.663) (xy 106.553 64.643) (xy 106.533 64.643) (xy 106.533 64.389) (xy 106.553 64.389)
+ (xy 106.553 64.369) (xy 106.807 64.369)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 95.53412 63.386437) (xy 95.455203 63.451203) (xy 95.267931 63.679394) (xy 95.25 63.71294) (xy 95.232069 63.679394)
+ (xy 95.044797 63.451203) (xy 94.816606 63.263931) (xy 94.556264 63.124775) (xy 94.273777 63.039084) (xy 94.053619 63.0174)
+ (xy 93.906381 63.0174) (xy 93.686223 63.039084) (xy 93.403736 63.124775) (xy 93.143394 63.263931) (xy 92.915203 63.451203)
+ (xy 92.727931 63.679394) (xy 92.71 63.71294) (xy 92.692069 63.679394) (xy 92.504797 63.451203) (xy 92.276606 63.263931)
+ (xy 92.016264 63.124775) (xy 91.733777 63.039084) (xy 91.513619 63.0174) (xy 91.366381 63.0174) (xy 91.146223 63.039084)
+ (xy 90.863736 63.124775) (xy 90.603394 63.263931) (xy 90.375203 63.451203) (xy 90.187931 63.679394) (xy 90.17 63.71294)
+ (xy 90.152069 63.679394) (xy 89.964797 63.451203) (xy 89.736606 63.263931) (xy 89.476264 63.124775) (xy 89.193777 63.039084)
+ (xy 88.973619 63.0174) (xy 88.826381 63.0174) (xy 88.606223 63.039084) (xy 88.323736 63.124775) (xy 88.063394 63.263931)
+ (xy 87.835203 63.451203) (xy 87.647931 63.679394) (xy 87.526394 63.906773) (xy 85.724999 62.105379) (xy 85.724999 60.834469)
+ (xy 86.07425 60.833) (xy 86.233 60.67425) (xy 86.233 59.309) (xy 86.487 59.309) (xy 86.487 60.67425)
+ (xy 86.64575 60.833) (xy 87.376 60.836072) (xy 87.500482 60.823812) (xy 87.62018 60.787502) (xy 87.63 60.782253)
+ (xy 87.63982 60.787502) (xy 87.759518 60.823812) (xy 87.884 60.836072) (xy 88.61425 60.833) (xy 88.773 60.67425)
+ (xy 88.773 59.309) (xy 89.027 59.309) (xy 89.027 60.67425) (xy 89.18575 60.833) (xy 89.916 60.836072)
+ (xy 90.040482 60.823812) (xy 90.16018 60.787502) (xy 90.270494 60.728537) (xy 90.367185 60.649185) (xy 90.446537 60.552494)
+ (xy 90.505502 60.44218) (xy 90.541812 60.322482) (xy 90.554072 60.198) (xy 90.551 59.46775) (xy 90.39225 59.309)
+ (xy 89.027 59.309) (xy 88.773 59.309) (xy 86.487 59.309) (xy 86.233 59.309) (xy 86.213 59.309)
+ (xy 86.213 59.055) (xy 86.233 59.055) (xy 86.233 59.035) (xy 86.487 59.035) (xy 86.487 59.055)
+ (xy 88.773 59.055) (xy 88.773 59.035) (xy 89.027 59.035) (xy 89.027 59.055) (xy 90.39225 59.055)
+ (xy 90.551 58.89625) (xy 90.553003 58.419999) (xy 90.567683 58.419999)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 138.557 43.053) (xy 138.577 43.053) (xy 138.577 43.307) (xy 138.557 43.307) (xy 138.557 44.513817)
+ (xy 138.789026 44.634958) (xy 138.939814 44.589222) (xy 139.204944 44.462684) (xy 139.440293 44.286854) (xy 139.636817 44.068488)
+ (xy 139.694137 43.97209) (xy 139.717931 44.016606) (xy 139.905203 44.244797) (xy 140.133394 44.432069) (xy 140.393736 44.571225)
+ (xy 140.676223 44.656916) (xy 140.896381 44.6786) (xy 141.043619 44.6786) (xy 141.263777 44.656916) (xy 141.546264 44.571225)
+ (xy 141.806606 44.432069) (xy 142.034797 44.244797) (xy 142.222069 44.016606) (xy 142.24 43.98306) (xy 142.257931 44.016606)
+ (xy 142.445203 44.244797) (xy 142.673394 44.432069) (xy 142.933736 44.571225) (xy 143.216223 44.656916) (xy 143.436381 44.6786)
+ (xy 143.583619 44.6786) (xy 143.803777 44.656916) (xy 144.086264 44.571225) (xy 144.346606 44.432069) (xy 144.574797 44.244797)
+ (xy 144.762069 44.016606) (xy 144.78 43.98306) (xy 144.797931 44.016606) (xy 144.985203 44.244797) (xy 145.213394 44.432069)
+ (xy 145.473736 44.571225) (xy 145.756223 44.656916) (xy 145.976381 44.6786) (xy 146.123619 44.6786) (xy 146.343777 44.656916)
+ (xy 146.626264 44.571225) (xy 146.886606 44.432069) (xy 147.114797 44.244797) (xy 147.302069 44.016606) (xy 147.32 43.98306)
+ (xy 147.337931 44.016606) (xy 147.525203 44.244797) (xy 147.753394 44.432069) (xy 148.013736 44.571225) (xy 148.296223 44.656916)
+ (xy 148.516381 44.6786) (xy 148.663619 44.6786) (xy 148.883777 44.656916) (xy 149.166264 44.571225) (xy 149.426606 44.432069)
+ (xy 149.654797 44.244797) (xy 149.842069 44.016606) (xy 149.86 43.98306) (xy 149.877931 44.016606) (xy 150.065203 44.244797)
+ (xy 150.293394 44.432069) (xy 150.553736 44.571225) (xy 150.836223 44.656916) (xy 151.056381 44.6786) (xy 151.203619 44.6786)
+ (xy 151.423777 44.656916) (xy 151.706264 44.571225) (xy 151.966606 44.432069) (xy 152.194797 44.244797) (xy 152.382069 44.016606)
+ (xy 152.4 43.98306) (xy 152.417931 44.016606) (xy 152.605203 44.244797) (xy 152.833394 44.432069) (xy 153.093736 44.571225)
+ (xy 153.376223 44.656916) (xy 153.596381 44.6786) (xy 153.743619 44.6786) (xy 153.963777 44.656916) (xy 154.246264 44.571225)
+ (xy 154.506606 44.432069) (xy 154.734797 44.244797) (xy 154.922069 44.016606) (xy 154.945863 43.97209) (xy 155.003183 44.068488)
+ (xy 155.199707 44.286854) (xy 155.435056 44.462684) (xy 155.566332 44.525338) (xy 149.41187 50.6798) (xy 145.342124 50.6798)
+ (xy 145.348015 50.665578) (xy 145.3895 50.457021) (xy 145.3895 50.244379) (xy 145.388251 50.2381) (xy 147.662477 50.2381)
+ (xy 147.6999 50.241786) (xy 147.737323 50.2381) (xy 147.737326 50.2381) (xy 147.849278 50.227074) (xy 147.992915 50.183502)
+ (xy 148.125292 50.112745) (xy 148.241322 50.017522) (xy 148.265184 49.988446) (xy 149.223131 49.0305) (xy 149.331321 49.0305)
+ (xy 149.539878 48.989015) (xy 149.736335 48.90764) (xy 149.913141 48.789502) (xy 150.063502 48.639141) (xy 150.18164 48.462335)
+ (xy 150.263015 48.265878) (xy 150.3045 48.057321) (xy 150.3045 47.844679) (xy 150.263015 47.636122) (xy 150.18164 47.439665)
+ (xy 150.063502 47.262859) (xy 149.913141 47.112498) (xy 149.736335 46.99436) (xy 149.539878 46.912985) (xy 149.331321 46.8715)
+ (xy 149.118679 46.8715) (xy 148.910122 46.912985) (xy 148.713665 46.99436) (xy 148.536859 47.112498) (xy 148.386498 47.262859)
+ (xy 148.26836 47.439665) (xy 148.186985 47.636122) (xy 148.1455 47.844679) (xy 148.1455 47.952869) (xy 147.38427 48.7141)
+ (xy 144.005422 48.7141) (xy 143.967999 48.710414) (xy 143.930576 48.7141) (xy 143.930574 48.7141) (xy 143.818622 48.725126)
+ (xy 143.674985 48.768698) (xy 143.606507 48.8053) (xy 142.874831 48.8053) (xy 143.268531 48.4116) (xy 143.376721 48.4116)
+ (xy 143.585278 48.370115) (xy 143.781735 48.28874) (xy 143.958541 48.170602) (xy 144.108902 48.020241) (xy 144.22704 47.843435)
+ (xy 144.308415 47.646978) (xy 144.3499 47.438421) (xy 144.3499 47.225779) (xy 144.308415 47.017222) (xy 144.22704 46.820765)
+ (xy 144.108902 46.643959) (xy 143.958541 46.493598) (xy 143.781735 46.37546) (xy 143.585278 46.294085) (xy 143.376721 46.2526)
+ (xy 143.164079 46.2526) (xy 142.955522 46.294085) (xy 142.759065 46.37546) (xy 142.582259 46.493598) (xy 142.431898 46.643959)
+ (xy 142.31376 46.820765) (xy 142.232385 47.017222) (xy 142.1909 47.225779) (xy 142.1909 47.333969) (xy 141.22797 48.2969)
+ (xy 141.0534 48.2969) (xy 141.0534 48.126179) (xy 141.011915 47.917622) (xy 140.93054 47.721165) (xy 140.812402 47.544359)
+ (xy 140.662041 47.393998) (xy 140.485235 47.27586) (xy 140.288778 47.194485) (xy 140.080221 47.153) (xy 139.97203 47.153)
+ (xy 137.003943 44.184913) (xy 137.142069 44.016606) (xy 137.165863 43.97209) (xy 137.223183 44.068488) (xy 137.419707 44.286854)
+ (xy 137.655056 44.462684) (xy 137.920186 44.589222) (xy 138.070974 44.634958) (xy 138.303 44.513817) (xy 138.303 43.307)
+ (xy 138.283 43.307) (xy 138.283 43.053) (xy 138.303 43.053) (xy 138.303 43.033) (xy 138.557 43.033)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 156.337 43.053) (xy 156.357 43.053) (xy 156.357 43.307) (xy 156.337 43.307) (xy 156.337 43.327)
+ (xy 156.083 43.327) (xy 156.083 43.307) (xy 156.063 43.307) (xy 156.063 43.053) (xy 156.083 43.053)
+ (xy 156.083 43.033) (xy 156.337 43.033)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 149.877931 41.476606) (xy 150.065203 41.704797) (xy 150.293394 41.892069) (xy 150.32694 41.91) (xy 150.293394 41.927931)
+ (xy 150.065203 42.115203) (xy 149.877931 42.343394) (xy 149.86 42.37694) (xy 149.842069 42.343394) (xy 149.654797 42.115203)
+ (xy 149.426606 41.927931) (xy 149.386567 41.90653) (xy 149.600293 41.746854) (xy 149.796817 41.528488) (xy 149.854137 41.43209)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 144.797931 41.476606) (xy 144.985203 41.704797) (xy 145.213394 41.892069) (xy 145.24694 41.91) (xy 145.213394 41.927931)
+ (xy 144.985203 42.115203) (xy 144.797931 42.343394) (xy 144.78 42.37694) (xy 144.762069 42.343394) (xy 144.574797 42.115203)
+ (xy 144.346606 41.927931) (xy 144.31306 41.91) (xy 144.346606 41.892069) (xy 144.574797 41.704797) (xy 144.762069 41.476606)
+ (xy 144.78 41.44306)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 132.097931 41.476606) (xy 132.285203 41.704797) (xy 132.513394 41.892069) (xy 132.54694 41.91) (xy 132.513394 41.927931)
+ (xy 132.285203 42.115203) (xy 132.097931 42.343394) (xy 132.08 42.37694) (xy 132.062069 42.343394) (xy 131.874797 42.115203)
+ (xy 131.646606 41.927931) (xy 131.606567 41.90653) (xy 131.820293 41.746854) (xy 132.016817 41.528488) (xy 132.074137 41.43209)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.157 40.513) (xy 113.177 40.513) (xy 113.177 40.767) (xy 113.157 40.767) (xy 113.157 40.787)
+ (xy 112.903 40.787) (xy 112.903 40.767) (xy 112.883 40.767) (xy 112.883 40.513) (xy 112.903 40.513)
+ (xy 112.903 40.493) (xy 113.157 40.493)
+ )
+ )
+ )
+)
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.pro b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.pro
new file mode 100644
index 0000000..de4da46
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.pro
@@ -0,0 +1,33 @@
+update=Sat 06 Jul 2019 08:45:23 PM PDT
+version=1
+last_client=kicad
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=
+UseCmpFile=1
+PadDrill=0.6
+PadDrillOvalY=0.6
+PadSizeH=1.5
+PadSizeV=1.5
+PcbTextSizeV=1.5
+PcbTextSizeH=1.5
+PcbTextThickness=0.3
+ModuleTextSizeV=1
+ModuleTextSizeH=1
+ModuleTextSizeThickness=0.15
+SolderMaskClearance=0
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.2
+BoardOutlineThickness=0.09999999999999999
+ModuleOutlineThickness=0.15
+[eeschema]
+version=1
+LibDir=
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.sch b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.sch
new file mode 100644
index 0000000..5b1ce22
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/active3-rpi-hub75-adapter.sch
@@ -0,0 +1,1030 @@
+EESchema Schematic File Version 4
+LIBS:active3-rpi-hub75-adapter-cache
+EELAYER 29 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date ""
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L Connector_Generic:Conn_02x08_Odd_Even Panel-1
+U 1 1 54ECB236
+P 8450 2500
+F 0 "Panel-1" H 8450 2950 50 0000 C CNN
+F 1 "CONN_02X08" V 8450 2500 50 0000 C CNN
+F 2 "Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical" H 8450 1300 60 0001 C CNN
+F 3 "" H 8450 1300 60 0000 C CNN
+ 1 8450 2500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Connector_Generic:Conn_02x20_Odd_Even P1
+U 1 1 54ECB2B7
+P 2450 3450
+F 0 "P1" H 2450 4500 50 0000 C CNN
+F 1 "CONN_02X20" V 2450 3450 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x20" H 2450 2500 60 0001 C CNN
+F 3 "" H 2450 2500 60 0000 C CNN
+ 1 2450 3450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2800 2500 2800 2550
+Wire Wire Line
+ 2750 2550 2800 2550
+Wire Wire Line
+ 2800 2650 2750 2650
+Connection ~ 2800 2550
+$Comp
+L power:GND #PWR09
+U 1 1 54ECB3E1
+P 2850 3150
+F 0 "#PWR09" H 2850 3150 30 0001 C CNN
+F 1 "GND" H 2850 3080 30 0001 C CNN
+F 2 "" H 2850 3150 60 0000 C CNN
+F 3 "" H 2850 3150 60 0000 C CNN
+ 1 2850 3150
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 2750 3150 2850 3150
+$Comp
+L power:GND #PWR010
+U 1 1 54ECB417
+P 2850 3450
+F 0 "#PWR010" H 2850 3450 30 0001 C CNN
+F 1 "GND" H 2850 3380 30 0001 C CNN
+F 2 "" H 2850 3450 60 0000 C CNN
+F 3 "" H 2850 3450 60 0000 C CNN
+ 1 2850 3450
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 2750 3450 2850 3450
+$Comp
+L power:GND #PWR08
+U 1 1 54ECB4A1
+P 2850 2750
+F 0 "#PWR08" H 2850 2750 30 0001 C CNN
+F 1 "GND" H 2850 2680 30 0001 C CNN
+F 2 "" H 2850 2750 60 0000 C CNN
+F 3 "" H 2850 2750 60 0000 C CNN
+ 1 2850 2750
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 2750 2750 2850 2750
+$Comp
+L power:GND #PWR02
+U 1 1 54ECB5FE
+P 2150 4450
+F 0 "#PWR02" H 2150 4450 30 0001 C CNN
+F 1 "GND" H 2150 4380 30 0001 C CNN
+F 2 "" H 2150 4450 60 0000 C CNN
+F 3 "" H 2150 4450 60 0000 C CNN
+ 1 2150 4450
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 2150 4450 2200 4450
+$Comp
+L power:GND #PWR011
+U 1 1 54ECB73E
+P 2850 4150
+F 0 "#PWR011" H 2850 4150 30 0001 C CNN
+F 1 "GND" H 2850 4080 30 0001 C CNN
+F 2 "" H 2850 4150 60 0000 C CNN
+F 3 "" H 2850 4150 60 0000 C CNN
+ 1 2850 4150
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 2750 4150 2850 4150
+$Comp
+L power:GND #PWR01
+U 1 1 54ECB7BC
+P 2150 3750
+F 0 "#PWR01" H 2150 3750 30 0001 C CNN
+F 1 "GND" H 2150 3680 30 0001 C CNN
+F 2 "" H 2150 3750 60 0000 C CNN
+F 3 "" H 2150 3750 60 0000 C CNN
+ 1 2150 3750
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 2150 3750 2250 3750
+Text GLabel 2250 2850 0 51 Output ~ 0
+strobe
+Text GLabel 2750 4050 2 51 Output ~ 0
+p1_r1
+Text GLabel 2250 3950 0 51 Output ~ 0
+p1_g1
+Text GLabel 2250 4050 0 51 Output ~ 0
+p1_b1
+Text GLabel 2250 4250 0 51 Output ~ 0
+p1_r2
+Text GLabel 2250 4150 0 51 Output ~ 0
+p1_g2
+Text GLabel 2750 4350 2 51 Output ~ 0
+p1_b2
+Text GLabel 2250 3250 0 51 Output ~ 0
+row_A
+Text GLabel 2750 3250 2 51 Output ~ 0
+row_B
+Text GLabel 2750 3350 2 51 Output ~ 0
+row_C
+Text GLabel 2750 3550 2 51 Output ~ 0
+row_D
+Text GLabel 2250 3050 0 51 Output ~ 0
+clock
+Text GLabel 2250 3650 0 51 Output ~ 0
+p0_r1
+Text GLabel 2250 3150 0 51 Output ~ 0
+p0_g1
+Text GLabel 2750 3750 2 51 Output ~ 0
+p0_b1
+Text GLabel 2750 3650 2 51 Output ~ 0
+p0_r2
+Text GLabel 2250 3550 0 51 Output ~ 0
+p0_g2
+Text GLabel 2250 3450 0 51 Output ~ 0
+p0_b2
+Text GLabel 2750 3050 2 51 Output ~ 0
+OE
+Text GLabel 5200 1700 0 51 Input ~ 0
+p0_g1
+Text GLabel 5200 1600 0 51 Input ~ 0
+p0_r1
+Text GLabel 5200 1500 0 51 Input ~ 0
+p0_b1
+Text GLabel 5200 1300 0 51 Input ~ 0
+p0_r2
+Text GLabel 5200 1200 0 51 Input ~ 0
+p0_b2
+Text GLabel 5200 1400 0 51 Input ~ 0
+p0_g2
+$Comp
+L power:GND #PWR021
+U 1 1 54ECD031
+P 9300 2900
+F 0 "#PWR021" H 9300 2900 30 0001 C CNN
+F 1 "GND" H 9300 2830 30 0001 C CNN
+F 2 "" H 9300 2900 60 0000 C CNN
+F 3 "" H 9300 2900 60 0000 C CNN
+ 1 9300 2900
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 9300 2900 8750 2900
+Text GLabel 4400 3300 0 51 Input ~ 0
+row_A
+Text GLabel 4400 3400 0 51 Input ~ 0
+row_B
+Text GLabel 4400 3200 0 51 Input ~ 0
+row_C
+Text GLabel 4400 3100 0 51 Input ~ 0
+row_D
+Text GLabel 4400 3500 0 51 Input ~ 0
+strobe
+Text GLabel 5200 1000 0 51 Input ~ 0
+OE
+$Comp
+L Connector_Generic:Conn_02x08_Odd_Even Panel-2
+U 1 1 54ECE201
+P 8450 3750
+F 0 "Panel-2" H 8450 4200 50 0000 C CNN
+F 1 "CONN_02X08" V 8450 3750 50 0000 C CNN
+F 2 "Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical" H 8450 2550 60 0001 C CNN
+F 3 "" H 8450 2550 60 0000 C CNN
+ 1 8450 3750
+ 1 0 0 -1
+$EndComp
+Text GLabel 5200 5250 0 51 Input ~ 0
+p1_g1
+Text GLabel 5200 5150 0 51 Input ~ 0
+p1_r1
+Text GLabel 5200 5050 0 51 Input ~ 0
+p1_b1
+Text GLabel 5200 4750 0 51 Input ~ 0
+p1_b2
+Text GLabel 5200 4950 0 51 Input ~ 0
+p1_g2
+$Comp
+L power:GND #PWR022
+U 1 1 54ECE20E
+P 9300 4150
+F 0 "#PWR022" H 9300 4150 30 0001 C CNN
+F 1 "GND" H 9300 4080 30 0001 C CNN
+F 2 "" H 9300 4150 60 0000 C CNN
+F 3 "" H 9300 4150 60 0000 C CNN
+ 1 9300 4150
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 9300 4150 8750 4150
+$Comp
+L Device:C C1
+U 1 1 54ECBE4F
+P 1950 5450
+F 0 "C1" H 1950 5550 40 0000 L CNN
+F 1 "100n" H 1956 5365 40 0000 L CNN
+F 2 "Capacitor_SMD:C_0805_2012Metric" H 1988 5300 30 0001 C CNN
+F 3 "" H 1950 5450 60 0000 C CNN
+ 1 1950 5450
+ 1 0 0 -1
+$EndComp
+$Comp
+L Device:C C2
+U 1 1 54ECBEE4
+P 2250 5450
+F 0 "C2" H 2250 5550 40 0000 L CNN
+F 1 "100n" H 2256 5365 40 0000 L CNN
+F 2 "Capacitor_SMD:C_0805_2012Metric" H 2288 5300 30 0001 C CNN
+F 3 "" H 2250 5450 60 0000 C CNN
+ 1 2250 5450
+ 1 0 0 -1
+$EndComp
+$Comp
+L Device:C C3
+U 1 1 54ECBF0A
+P 2550 5450
+F 0 "C3" H 2550 5550 40 0000 L CNN
+F 1 "100n" H 2556 5365 40 0000 L CNN
+F 2 "Capacitor_SMD:C_0805_2012Metric" H 2588 5300 30 0001 C CNN
+F 3 "" H 2550 5450 60 0000 C CNN
+ 1 2550 5450
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR04
+U 1 1 54ECBF56
+P 2250 5700
+F 0 "#PWR04" H 2250 5700 30 0001 C CNN
+F 1 "GND" H 2250 5630 30 0001 C CNN
+F 2 "" H 2250 5700 60 0000 C CNN
+F 3 "" H 2250 5700 60 0000 C CNN
+ 1 2250 5700
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2250 5600 2250 5700
+Wire Wire Line
+ 2250 5200 2250 5300
+Wire Wire Line
+ 1950 5300 2250 5300
+Connection ~ 2250 5300
+Wire Wire Line
+ 1950 5600 2250 5600
+Connection ~ 2250 5600
+$Comp
+L power:VCC #PWR03
+U 1 1 54ECD0C1
+P 2250 5200
+F 0 "#PWR03" H 2250 5300 30 0001 C CNN
+F 1 "VCC" H 2250 5300 30 0000 C CNN
+F 2 "" H 2250 5200 60 0000 C CNN
+F 3 "" H 2250 5200 60 0000 C CNN
+ 1 2250 5200
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:VCC #PWR07
+U 1 1 54ECD3DE
+P 2800 2500
+F 0 "#PWR07" H 2800 2600 30 0001 C CNN
+F 1 "VCC" H 2800 2600 30 0000 C CNN
+F 2 "" H 2800 2500 60 0000 C CNN
+F 3 "" H 2800 2500 60 0000 C CNN
+ 1 2800 2500
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR017
+U 1 1 54ECF31C
+P 5200 2050
+F 0 "#PWR017" H 5200 2050 30 0001 C CNN
+F 1 "GND" H 5200 1980 30 0001 C CNN
+F 2 "" H 5200 2050 60 0000 C CNN
+F 3 "" H 5200 2050 60 0000 C CNN
+ 1 5200 2050
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5200 2000 5200 2050
+$Comp
+L power:GND #PWR018
+U 1 1 54ECF3AB
+P 4400 3850
+F 0 "#PWR018" H 4400 3850 30 0001 C CNN
+F 1 "GND" H 4400 3780 30 0001 C CNN
+F 2 "" H 4400 3850 60 0000 C CNN
+F 3 "" H 4400 3850 60 0000 C CNN
+ 1 4400 3850
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR019
+U 1 1 54ECF608
+P 5200 5600
+F 0 "#PWR019" H 5200 5600 30 0001 C CNN
+F 1 "GND" H 5200 5530 30 0001 C CNN
+F 2 "" H 5200 5600 60 0000 C CNN
+F 3 "" H 5200 5600 60 0000 C CNN
+ 1 5200 5600
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4400 3800 4400 3850
+Wire Wire Line
+ 5200 5550 5200 5600
+Text GLabel 5200 4550 0 51 Input ~ 0
+OE
+Text GLabel 5200 4650 0 51 Input ~ 0
+clock
+Text GLabel 5200 1100 0 51 Input ~ 0
+clock
+Text GLabel 6200 4950 2 51 Output ~ 0
+p1_g2_buf
+Text GLabel 8750 3650 2 51 Input ~ 0
+p1_g2_buf
+Text GLabel 5200 4850 0 51 Input ~ 0
+p1_r2
+Text GLabel 6200 4750 2 51 Output ~ 0
+p1_b2_buff
+Text GLabel 8750 3450 2 51 Input ~ 0
+p1_g1_buff
+Text GLabel 6200 1400 2 51 Output ~ 0
+p0_g2_buff
+Text GLabel 8750 2400 2 51 Input ~ 0
+p0_g2_buff
+Text GLabel 6200 1700 2 51 Output ~ 0
+p0_g1_buff
+Text GLabel 8750 2200 2 51 Input ~ 0
+p0_g1_buff
+Text GLabel 5400 3100 2 51 Output ~ 0
+row_D_buff
+Text GLabel 8750 2700 2 51 Input ~ 0
+row_D_buff
+Text GLabel 5400 3400 2 51 Output ~ 0
+row_B_buff
+Text GLabel 8750 2600 2 51 Input ~ 0
+row_B_buff
+Text GLabel 8750 3850 2 51 Input ~ 0
+row_B_buff
+Text GLabel 8750 3950 2 51 Input ~ 0
+row_D_buff
+Text GLabel 4400 3000 0 51 Input ~ 0
+strobe
+$Comp
+L power:VCC #PWR013
+U 1 1 54ED6227
+P 4950 1900
+F 0 "#PWR013" H 4950 2000 30 0001 C CNN
+F 1 "VCC" H 4950 2000 30 0000 C CNN
+F 2 "" H 4950 1900 60 0000 C CNN
+F 3 "" H 4950 1900 60 0000 C CNN
+ 1 4950 1900
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5200 1900 4950 1900
+$Comp
+L power:VCC #PWR014
+U 1 1 54ED629A
+P 4150 3700
+F 0 "#PWR014" H 4150 3800 30 0001 C CNN
+F 1 "VCC" H 4150 3800 30 0000 C CNN
+F 2 "" H 4150 3700 60 0000 C CNN
+F 3 "" H 4150 3700 60 0000 C CNN
+ 1 4150 3700
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4150 3700 4400 3700
+$Comp
+L power:VCC #PWR015
+U 1 1 54ED670D
+P 5000 5450
+F 0 "#PWR015" H 5000 5550 30 0001 C CNN
+F 1 "VCC" H 5000 5550 30 0000 C CNN
+F 2 "" H 5000 5450 60 0000 C CNN
+F 3 "" H 5000 5450 60 0000 C CNN
+ 1 5000 5450
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5000 5450 5200 5450
+Text GLabel 8250 2200 0 51 Input ~ 0
+p0_r1_buff
+Text GLabel 8250 2800 0 51 Input ~ 0
+clock_buff_0
+Text GLabel 6200 1600 2 51 Output ~ 0
+p0_r1_buff
+Text GLabel 8250 2500 0 51 Input ~ 0
+p0_b2_buff
+Text GLabel 8250 2300 0 51 Input ~ 0
+p0_b1_buff
+Text GLabel 8250 2400 0 51 Input ~ 0
+p0_r2_buff
+Text GLabel 8250 2900 0 51 Input ~ 0
+OE_buff_0
+Text GLabel 6200 1500 2 51 Output ~ 0
+p0_b1_buff
+Text GLabel 6200 1200 2 51 Output ~ 0
+p0_b2_buff
+Text GLabel 6200 1300 2 51 Output ~ 0
+p0_r2_buff
+Text GLabel 6200 1100 2 51 Output ~ 0
+clock_buff_0
+Text GLabel 6200 1000 2 51 Output ~ 0
+OE_buff_0
+Text GLabel 8250 3450 0 51 Input ~ 0
+p1_r1_buff
+Text GLabel 8250 3550 0 51 Input ~ 0
+p1_b1_buff
+Text GLabel 8250 3650 0 51 Input ~ 0
+p1_r2_buff
+Text GLabel 8250 3750 0 51 Input ~ 0
+p1_b2_buff
+Text GLabel 8250 4050 0 51 Input ~ 0
+clock_buff_1
+Text GLabel 8250 4150 0 51 Input ~ 0
+OE_buff_1
+Text GLabel 6200 4550 2 51 Output ~ 0
+OE_buff_1
+Text GLabel 6200 4650 2 51 Output ~ 0
+clock_buff_1
+Text GLabel 6200 4850 2 51 Output ~ 0
+p1_r2_buff
+Text GLabel 6200 5050 2 51 Output ~ 0
+p1_b1_buff
+Text GLabel 6200 5150 2 51 Output ~ 0
+p1_r1_buff
+Text GLabel 6200 5250 2 51 Output ~ 0
+p1_g1_buff
+Text GLabel 2750 2850 2 51 Output ~ 0
+p2_r1
+Text GLabel 2250 2650 0 51 Output ~ 0
+p2_g1
+Text GLabel 2250 2750 0 51 Output ~ 0
+p2_b1
+Text GLabel 2250 4350 0 51 Output ~ 0
+p2_r2
+Text GLabel 2750 4250 2 51 Output ~ 0
+p2_g2
+Text GLabel 2750 4450 2 51 Output ~ 0
+p2_b2
+$Comp
+L Device:C C4
+U 1 1 54F3B6F5
+P 2800 5450
+F 0 "C4" H 2800 5550 40 0000 L CNN
+F 1 "100n" H 2806 5365 40 0000 L CNN
+F 2 "Capacitor_SMD:C_0805_2012Metric" H 2838 5300 30 0001 C CNN
+F 3 "" H 2800 5450 60 0000 C CNN
+ 1 2800 5450
+ 1 0 0 -1
+$EndComp
+Connection ~ 2550 5300
+Connection ~ 2550 5600
+Text GLabel 5400 3200 2 51 Output ~ 0
+row_C_buff
+Text GLabel 5400 3300 2 51 Output ~ 0
+row_A_buff
+Text GLabel 5400 3500 2 51 Output ~ 0
+strobe_buff_0
+Text GLabel 5400 3000 2 51 Output ~ 0
+strobe_buff_1
+Text GLabel 8250 3850 0 51 Input ~ 0
+row_A_buff
+Text GLabel 8250 3950 0 51 Input ~ 0
+row_C_buff
+Text GLabel 8250 2600 0 51 Input ~ 0
+row_A_buff
+Text GLabel 8250 2700 0 51 Input ~ 0
+row_C_buff
+Text GLabel 8750 4050 2 51 Input ~ 0
+strobe_buff_1
+Text GLabel 8750 2800 2 51 Input ~ 0
+strobe_buff_0
+$Comp
+L Connector_Generic:Conn_02x08_Odd_Even Panel-3
+U 1 1 54F3E6D5
+P 8450 5200
+F 0 "Panel-3" H 8450 5650 50 0000 C CNN
+F 1 "CONN_02X08" V 8450 5200 50 0000 C CNN
+F 2 "Connector_IDC:IDC-Header_2x08_P2.54mm_Vertical" H 8450 4000 60 0001 C CNN
+F 3 "" H 8450 4000 60 0000 C CNN
+ 1 8450 5200
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR023
+U 1 1 54F3E6DC
+P 9300 5600
+F 0 "#PWR023" H 9300 5600 30 0001 C CNN
+F 1 "GND" H 9300 5530 30 0001 C CNN
+F 2 "" H 9300 5600 60 0000 C CNN
+F 3 "" H 9300 5600 60 0000 C CNN
+ 1 9300 5600
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 9300 5600 8750 5600
+Text GLabel 8750 5100 2 51 Input ~ 0
+p2_g2_buf
+Text GLabel 8750 4900 2 51 Input ~ 0
+p2_g1_buff
+Text GLabel 8750 5300 2 51 Input ~ 0
+row_B_buff
+Text GLabel 8750 5400 2 51 Input ~ 0
+row_D_buff
+Text GLabel 8250 4900 0 51 Input ~ 0
+p2_r1_buff
+Text GLabel 8250 5000 0 51 Input ~ 0
+p2_b1_buff
+Text GLabel 8250 5100 0 51 Input ~ 0
+p2_r2_buff
+Text GLabel 8250 5200 0 51 Input ~ 0
+p2_b2_buff
+Text GLabel 8250 5500 0 51 Input ~ 0
+clock_buff_2
+Text GLabel 8250 5600 0 51 Input ~ 0
+OE_buff_2
+Text GLabel 8250 5300 0 51 Input ~ 0
+row_A_buff
+Text GLabel 8250 5400 0 51 Input ~ 0
+row_C_buff
+Text GLabel 8750 5500 2 51 Input ~ 0
+strobe_buff_2
+Text GLabel 4400 6900 0 51 Input ~ 0
+p2_g1
+Text GLabel 4400 6800 0 51 Input ~ 0
+p2_r1
+Text GLabel 4400 6700 0 51 Input ~ 0
+p2_b1
+Text GLabel 4400 6400 0 51 Input ~ 0
+p2_b2
+Text GLabel 4400 6600 0 51 Input ~ 0
+p2_g2
+$Comp
+L power:GND #PWR020
+U 1 1 54F3F4AD
+P 4400 7250
+F 0 "#PWR020" H 4400 7250 30 0001 C CNN
+F 1 "GND" H 4400 7180 30 0001 C CNN
+F 2 "" H 4400 7250 60 0000 C CNN
+F 3 "" H 4400 7250 60 0000 C CNN
+ 1 4400 7250
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4400 7200 4400 7250
+Text GLabel 4400 6200 0 51 Input ~ 0
+OE
+Text GLabel 4400 6300 0 51 Input ~ 0
+clock
+Text GLabel 5400 6600 2 51 Output ~ 0
+p2_g2_buf
+Text GLabel 4400 6500 0 51 Input ~ 0
+p2_r2
+Text GLabel 5400 6400 2 51 Output ~ 0
+p2_b2_buff
+$Comp
+L power:VCC #PWR016
+U 1 1 54F3F4B9
+P 4200 7100
+F 0 "#PWR016" H 4200 7200 30 0001 C CNN
+F 1 "VCC" H 4200 7200 30 0000 C CNN
+F 2 "" H 4200 7100 60 0000 C CNN
+F 3 "" H 4200 7100 60 0000 C CNN
+ 1 4200 7100
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4200 7100 4400 7100
+Text GLabel 5400 6200 2 51 Output ~ 0
+OE_buff_2
+Text GLabel 5400 6300 2 51 Output ~ 0
+clock_buff_2
+Text GLabel 5400 6500 2 51 Output ~ 0
+p2_r2_buff
+Text GLabel 5400 6700 2 51 Output ~ 0
+p2_b1_buff
+Text GLabel 5400 6800 2 51 Output ~ 0
+p2_r1_buff
+Text GLabel 5400 6900 2 51 Output ~ 0
+p2_g1_buff
+Text GLabel 5400 2900 2 51 Output ~ 0
+strobe_buff_2
+Text GLabel 4400 2900 0 51 Input ~ 0
+strobe
+NoConn ~ 2250 3850
+NoConn ~ 2750 3850
+NoConn ~ 2750 3950
+NoConn ~ 2250 2950
+NoConn ~ 2250 3350
+$Comp
+L power:PWR_FLAG #FLG02
+U 1 1 557B1FD6
+P 3000 2550
+F 0 "#FLG02" H 3000 2645 50 0001 C CNN
+F 1 "PWR_FLAG" H 3000 2730 50 0000 C CNN
+F 2 "" H 3000 2550 60 0000 C CNN
+F 3 "" H 3000 2550 60 0000 C CNN
+ 1 3000 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:PWR_FLAG #FLG01
+U 1 1 557B23A7
+P 2200 4550
+F 0 "#FLG01" H 2200 4645 50 0001 C CNN
+F 1 "PWR_FLAG" H 2200 4730 50 0000 C CNN
+F 2 "" H 2200 4550 60 0000 C CNN
+F 3 "" H 2200 4550 60 0000 C CNN
+ 1 2200 4550
+ -1 0 0 1
+$EndComp
+Wire Wire Line
+ 2200 4450 2200 4550
+Connection ~ 2200 4450
+$Comp
+L Device:R R1
+U 1 1 55B6F717
+P 2250 2300
+F 0 "R1" V 2330 2300 50 0000 C CNN
+F 1 "10k" V 2250 2300 50 0000 C CNN
+F 2 "Resistor_SMD:R_0805_2012Metric" V 2180 2300 30 0001 C CNN
+F 3 "" H 2250 2300 30 0000 C CNN
+ 1 2250 2300
+ 1 0 0 -1
+$EndComp
+Text GLabel 2250 2100 1 51 Input ~ 0
+OE
+Wire Wire Line
+ 2250 2450 2250 2550
+Wire Wire Line
+ 2250 2150 2250 2100
+$Comp
+L power:GND #PWR06
+U 1 1 562B120F
+P 2750 1650
+F 0 "#PWR06" H 2750 1650 30 0001 C CNN
+F 1 "GND" H 2750 1580 30 0001 C CNN
+F 2 "" H 2750 1650 60 0000 C CNN
+F 3 "" H 2750 1650 60 0000 C CNN
+ 1 2750 1650
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:VCC #PWR05
+U 1 1 562B12CC
+P 2650 1450
+F 0 "#PWR05" H 2650 1550 30 0001 C CNN
+F 1 "VCC" H 2650 1550 30 0000 C CNN
+F 2 "" H 2650 1450 60 0000 C CNN
+F 3 "" H 2650 1450 60 0000 C CNN
+ 1 2650 1450
+ 1 0 0 -1
+$EndComp
+Text Notes 1650 1550 0 60 ~ 0
+Pi Power 5V
+$Comp
+L Device:CP_Small C5
+U 1 1 562B14A5
+P 2750 1550
+F 0 "C5" H 2760 1620 50 0000 L CNN
+F 1 "22u" H 2700 1700 50 0000 L CNN
+F 2 "Capacitor_THT:CP_Radial_D6.3mm_P2.50mm" H 2750 1550 60 0001 C CNN
+F 3 "" H 2750 1550 60 0000 C CNN
+ 1 2750 1550
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2600 1550 2600 1650
+Wire Wire Line
+ 2600 1650 2750 1650
+Wire Wire Line
+ 2600 1450 2650 1450
+Connection ~ 2650 1450
+$Comp
+L Connector_Generic:Conn_01x01 P3
+U 1 1 562B292A
+P 3350 2950
+F 0 "P3" H 3350 3050 50 0000 C CNN
+F 1 "RxD" V 3450 2950 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_1x01" H 3350 2950 60 0001 C CNN
+F 3 "" H 3350 2950 60 0000 C CNN
+ 1 3350 2950
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 2750 2950 3100 2950
+Connection ~ 2750 1650
+$Comp
+L Device:C_Small C6
+U 1 1 562B2FF4
+P 2950 1550
+F 0 "C6" H 2960 1620 50 0000 L CNN
+F 1 "22u" H 2900 1700 50 0000 L CNN
+F 2 "Capacitor_SMD:C_1206_3216Metric" H 2950 1550 60 0001 C CNN
+F 3 "" H 2950 1550 60 0000 C CNN
+ 1 2950 1550
+ 1 0 0 -1
+$EndComp
+Connection ~ 2750 1450
+Text Notes 2400 1850 0 60 ~ 0
+C alt. footprint
+$Comp
+L Connector_Generic:Conn_01x01 P2
+U 1 1 562B3873
+P 2400 1450
+F 0 "P2" H 2500 1450 50 0000 C CNN
+F 1 "+5V" V 2500 1450 50 0001 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_1x01" H 2400 1450 60 0001 C CNN
+F 3 "" H 2400 1450 60 0000 C CNN
+ 1 2400 1450
+ -1 0 0 1
+$EndComp
+$Comp
+L Connector_Generic:Conn_01x01 P4
+U 1 1 562B38C3
+P 2400 1550
+F 0 "P4" H 2500 1550 50 0000 C CNN
+F 1 "GND" V 2500 1550 50 0001 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_1x01" H 2400 1550 60 0001 C CNN
+F 3 "" H 2400 1550 60 0000 C CNN
+ 1 2400 1550
+ -1 0 0 1
+$EndComp
+$Comp
+L Connector_Generic:Conn_01x01 P5
+U 1 1 562BCB6A
+P 3600 2950
+F 0 "P5" H 3600 3050 50 0000 C CNN
+F 1 "GND" V 3700 2950 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_1x01" H 3600 2950 60 0001 C CNN
+F 3 "" H 3600 2950 60 0000 C CNN
+ 1 3600 2950
+ 0 -1 -1 0
+$EndComp
+$Comp
+L power:GND #PWR012
+U 1 1 562BCCEC
+P 3600 3150
+F 0 "#PWR012" H 3600 3150 30 0001 C CNN
+F 1 "GND" H 3600 3080 30 0001 C CNN
+F 2 "" H 3600 3150 60 0000 C CNN
+F 3 "" H 3600 3150 60 0000 C CNN
+ 1 3600 3150
+ 1 0 0 -1
+$EndComp
+Text GLabel 3150 2700 2 51 Output ~ 0
+row_E
+Wire Wire Line
+ 3150 2700 3100 2700
+Wire Wire Line
+ 3100 2700 3100 2950
+Connection ~ 3100 2950
+Text GLabel 4400 2800 0 51 Input ~ 0
+row_E
+$Comp
+L Connector_Generic:Conn_01x02 P6
+U 1 1 573741C0
+P 9600 1500
+F 0 "P6" H 9600 1650 50 0000 C CNN
+F 1 "CONN_01X02" H 9150 1650 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_1x02" H 9600 1500 60 0001 C CNN
+F 3 "" H 9600 1500 60 0000 C CNN
+ 1 9600 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L Connector_Generic:Conn_01x02 P8
+U 1 1 57374379
+P 10100 1600
+F 0 "P8" H 10100 1750 50 0000 C CNN
+F 1 "CONN_01X02" H 9950 1450 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_1x02" H 10100 1600 60 0001 C CNN
+F 3 "" H 10100 1600 60 0000 C CNN
+ 1 10100 1600
+ -1 0 0 1
+$EndComp
+$Comp
+L Connector_Generic:Conn_02x01 P7
+U 1 1 573743CD
+P 9850 1500
+F 0 "P7" H 9850 1600 50 0000 C CNN
+F 1 "CONN_02X01" H 9850 1400 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_1x02" H 9850 300 60 0001 C CNN
+F 3 "" H 9850 300 60 0000 C CNN
+ 1 9850 1500
+ 0 1 1 0
+$EndComp
+Text GLabel 9850 1300 1 51 Output ~ 0
+Sel-Pin4
+Text GLabel 9850 1800 3 51 Output ~ 0
+Sel-Pin8
+Text GLabel 8750 2300 2 51 Input ~ 0
+Sel-Pin4
+Text GLabel 8750 2500 2 51 Input ~ 0
+Sel-Pin8
+Text GLabel 8750 3550 2 51 Input ~ 0
+Sel-Pin4
+Text GLabel 8750 5000 2 51 Input ~ 0
+Sel-Pin4
+Text GLabel 8750 3750 2 51 Input ~ 0
+Sel-Pin8
+Text GLabel 8750 5200 2 51 Input ~ 0
+Sel-Pin8
+Wire Wire Line
+ 7350 1500 9400 1500
+Wire Wire Line
+ 9400 1500 9400 1600
+Connection ~ 9400 1500
+Wire Wire Line
+ 10300 1500 10300 1600
+$Comp
+L power:GND #PWR024
+U 1 1 57379022
+P 10300 1650
+F 0 "#PWR024" H 10300 1650 30 0001 C CNN
+F 1 "GND" H 10300 1580 30 0001 C CNN
+F 2 "" H 10300 1650 60 0000 C CNN
+F 3 "" H 10300 1650 60 0000 C CNN
+ 1 10300 1650
+ 1 0 0 -1
+$EndComp
+Connection ~ 10300 1600
+Text Notes 8050 1900 0 60 ~ 0
+Jumper for 1:32 multiplexing:\nSelection if E-Line on Pin 4 or 8\nOtherwise: Ground (for non-1:32).
+Wire Wire Line
+ 2800 2550 2800 2650
+Wire Wire Line
+ 2800 2550 3000 2550
+Wire Wire Line
+ 2250 5300 2550 5300
+Wire Wire Line
+ 2250 5600 2550 5600
+Wire Wire Line
+ 2550 5300 2800 5300
+Wire Wire Line
+ 2550 5600 2800 5600
+Wire Wire Line
+ 2200 4450 2250 4450
+Wire Wire Line
+ 2650 1450 2750 1450
+Wire Wire Line
+ 2750 1650 2950 1650
+Wire Wire Line
+ 2750 1450 2950 1450
+Wire Wire Line
+ 3100 2950 3150 2950
+Wire Wire Line
+ 10300 1600 10300 1650
+$Comp
+L 74xx:74HC245 U1
+U 1 1 5D21950C
+P 5700 1500
+F 0 "U1" H 5700 1750 50 0000 C CNN
+F 1 "74HCT245" H 5700 1200 50 0000 C CNN
+F 2 "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" H 5700 1500 50 0001 C CNN
+F 3 "http://www.ti.com/lit/gpn/sn74HC245" H 5700 1500 50 0001 C CNN
+ 1 5700 1500
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74xx:74HC245 U2
+U 1 1 5D22AB08
+P 4900 3300
+F 0 "U2" H 4900 3550 50 0000 C CNN
+F 1 "74HCT245" H 4900 3000 50 0000 C CNN
+F 2 "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" H 4900 3300 50 0001 C CNN
+F 3 "http://www.ti.com/lit/gpn/sn74HC245" H 4900 3300 50 0001 C CNN
+ 1 4900 3300
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74xx:74HC245 U3
+U 1 1 5D23CC9C
+P 5700 5050
+F 0 "U3" H 5700 5300 50 0000 C CNN
+F 1 "74HCT245" H 5700 4750 50 0000 C CNN
+F 2 "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" H 5700 5050 50 0001 C CNN
+F 3 "http://www.ti.com/lit/gpn/sn74HC245" H 5700 5050 50 0001 C CNN
+ 1 5700 5050
+ 1 0 0 -1
+$EndComp
+$Comp
+L 74xx:74HC245 U4
+U 1 1 5D23FE55
+P 4900 6700
+F 0 "U4" H 4900 6950 50 0000 C CNN
+F 1 "74HCT245" H 4900 6400 50 0000 C CNN
+F 2 "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" H 4900 6700 50 0001 C CNN
+F 3 "http://www.ti.com/lit/gpn/sn74HC245" H 4900 6700 50 0001 C CNN
+ 1 4900 6700
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR0101
+U 1 1 5D245A6F
+P 5700 2300
+F 0 "#PWR0101" H 5700 2300 30 0001 C CNN
+F 1 "GND" H 5700 2230 30 0001 C CNN
+F 2 "" H 5700 2300 60 0000 C CNN
+F 3 "" H 5700 2300 60 0000 C CNN
+ 1 5700 2300
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR0102
+U 1 1 5D24DA95
+P 4900 4100
+F 0 "#PWR0102" H 4900 4100 30 0001 C CNN
+F 1 "GND" H 4900 4030 30 0001 C CNN
+F 2 "" H 4900 4100 60 0000 C CNN
+F 3 "" H 4900 4100 60 0000 C CNN
+ 1 4900 4100
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:VCC #PWR0103
+U 1 1 5D24E926
+P 5700 4250
+F 0 "#PWR0103" H 5700 4100 50 0001 C CNN
+F 1 "VCC" H 5717 4423 50 0000 C CNN
+F 2 "" H 5700 4250 50 0001 C CNN
+F 3 "" H 5700 4250 50 0001 C CNN
+ 1 5700 4250
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR0104
+U 1 1 5D24F243
+P 5700 5850
+F 0 "#PWR0104" H 5700 5850 30 0001 C CNN
+F 1 "GND" H 5700 5780 30 0001 C CNN
+F 2 "" H 5700 5850 60 0000 C CNN
+F 3 "" H 5700 5850 60 0000 C CNN
+ 1 5700 5850
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:GND #PWR0105
+U 1 1 5D2513C6
+P 4900 7500
+F 0 "#PWR0105" H 4900 7500 30 0001 C CNN
+F 1 "GND" H 4900 7430 30 0001 C CNN
+F 2 "" H 4900 7500 60 0000 C CNN
+F 3 "" H 4900 7500 60 0000 C CNN
+ 1 4900 7500
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:VCC #PWR0106
+U 1 1 5D251E34
+P 4900 5900
+F 0 "#PWR0106" H 4900 5750 50 0001 C CNN
+F 1 "VCC" H 4917 6073 50 0000 C CNN
+F 2 "" H 4900 5900 50 0001 C CNN
+F 3 "" H 4900 5900 50 0001 C CNN
+ 1 4900 5900
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:VCC #PWR0107
+U 1 1 5D252DED
+P 5700 700
+F 0 "#PWR0107" H 5700 550 50 0001 C CNN
+F 1 "VCC" H 5717 873 50 0000 C CNN
+F 2 "" H 5700 700 50 0001 C CNN
+F 3 "" H 5700 700 50 0001 C CNN
+ 1 5700 700
+ 1 0 0 -1
+$EndComp
+$Comp
+L power:VCC #PWR0108
+U 1 1 5D253721
+P 4900 2500
+F 0 "#PWR0108" H 4900 2350 50 0001 C CNN
+F 1 "VCC" H 4917 2673 50 0000 C CNN
+F 2 "" H 4900 2500 50 0001 C CNN
+F 3 "" H 4900 2500 50 0001 C CNN
+ 1 4900 2500
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 5400 2800 7350 2800
+Wire Wire Line
+ 7350 1500 7350 2800
+$EndSCHEMATC
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/schematic.pdf b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/schematic.pdf
new file mode 100644
index 0000000..db47e45
Binary files /dev/null and b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/active-3/schematic.pdf differ
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/kicad-scripts/kicad-fab.py b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/kicad-scripts/kicad-fab.py
new file mode 100644
index 0000000..af0ccf3
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/kicad-scripts/kicad-fab.py
@@ -0,0 +1,83 @@
+'''
+ Based on gen_gerber_and_drill_files_board.py in kicad/demos directory.
+'''
+
+import sys
+
+from pcbnew import *
+filename=sys.argv[1]
+
+board = LoadBoard(filename)
+
+plotDir = "plot/"
+
+pctl = PLOT_CONTROLLER(board)
+
+popt = pctl.GetPlotOptions()
+
+popt.SetOutputDirectory(plotDir)
+
+# Set some important plot options:
+popt.SetPlotFrameRef(False)
+popt.SetLineWidth(FromMM(0.35))
+
+popt.SetAutoScale(False)
+popt.SetScale(1)
+popt.SetMirror(False)
+popt.SetUseGerberAttributes(False)
+popt.SetUseGerberProtelExtensions(True)
+popt.SetExcludeEdgeLayer(True);
+popt.SetScale(1)
+popt.SetUseAuxOrigin(True)
+
+# This by gerbers only (also the name is truly horrid!)
+popt.SetSubtractMaskFromSilk(False)
+
+# param 0 is the layer ID
+# param 1 is a string added to the file base name to identify the drawing
+# param 2 is a comment
+# Create filenames in a way that if they are sorted alphabetically, they
+# are shown in exactly the layering the board would look like. So
+# gerbv *
+# just makes sense.
+plot_plan = [
+ ( Edge_Cuts, "0-Edge_Cuts", "Edges" ),
+
+ ( F_Paste, "1-PasteTop", "Paste top" ),
+ ( F_SilkS, "2-SilkTop", "Silk top" ),
+ ( F_Mask, "3-MaskTop", "Mask top" ),
+ ( F_Cu, "4-CuTop", "Top layer" ),
+
+ ( B_Cu, "5-CuBottom", "Bottom layer" ),
+ ( B_Mask, "6-MaskBottom", "Mask bottom" ),
+ ( B_SilkS, "7-SilkBottom", "Silk top" ),
+ ( B_Paste, "8-PasteBottom", "Paste Bottom" ),
+]
+
+
+for layer_info in plot_plan:
+ pctl.SetLayer(layer_info[0])
+ pctl.OpenPlotfile(layer_info[1], PLOT_FORMAT_GERBER, layer_info[2])
+ pctl.PlotLayer()
+
+# At the end you have to close the last plot, otherwise you don't know when
+# the object will be recycled!
+pctl.ClosePlot()
+
+# Fabricators need drill files.
+# sometimes a drill map file is asked (for verification purpose)
+drlwriter = EXCELLON_WRITER( board )
+drlwriter.SetMapFileFormat( PLOT_FORMAT_PDF )
+
+mirror = False
+minimalHeader = False
+offset = wxPoint(0,0)
+mergeNPTH = True
+drlwriter.SetOptions( mirror, minimalHeader, offset, mergeNPTH )
+
+metricFmt = True
+drlwriter.SetFormat( metricFmt )
+
+genDrl = True
+genMap = True
+drlwriter.CreateDrillandMapFilesSet( plotDir, genDrl, genMap );
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/kicad-scripts/makefile.inc b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/kicad-scripts/makefile.inc
new file mode 100644
index 0000000..3da11e6
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/kicad-scripts/makefile.inc
@@ -0,0 +1,8 @@
+# -*- Makefile -*-
+
+%-fab.zip : %-fab.kicad_pcb
+ python ../kicad-scripts/kicad-fab.py $<
+ zip -r $@ plot/
+
+%-fab.kicad_pcb : %.kicad_pcb
+ sed "s/%%gitversion%%/`git log --date=short --pretty=format:'%h@%cd' -n 1`/" < $^ > $@
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/Makefile
new file mode 100644
index 0000000..379bfc6
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/Makefile
@@ -0,0 +1,3 @@
+include ../kicad-scripts/makefile.inc
+
+passive3-rpi-hub75-adapter-fab.zip:
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/README.md
new file mode 100644
index 0000000..e227cf0
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/README.md
@@ -0,0 +1,26 @@
+Adapter PCB to support up to 3 panel chains
+===========================================
+
+ * This is a passive board. It is simple, but the logic level will be out of
+ spec for the LED matrix (3.3V vs. 5V) which might or might not work.
+ Driving long cables with the GPIO pins is also not a good idea.
+ * You typically want to consider using the [active board](../active-3).
+ * Works for Matrix up to 1:16 multiplexing (32 rows). For 1:32 multiplexing,
+ you want to use the [active board](../active-3). You can of also hack
+ this board as [suggested in this bugtracker entry](https://github.com/hzeller/rpi-rgb-led-matrix/issues/360#issuecomment-321104348) to make it work with
+ 64x64 boards.
+ * Only really advisable, if the LED panels have 74HCT245 (as opposed to just
+ 74HC245) in their input stage, because then they can deal properly with
+ the 3.3V logic levels coming from the Pi.
+ * Supports up to three panel chains for newer plus models and
+ Raspberry Pi 2/3 that have 40 GPIO pins.
+ * Open source KiCAD PCB EDA format.
+ * (not very pretty layout, was just lazy and let the auto-router do it).
+ * The FAB files are provided as [passive3-rpi-hub75-adapter-fab.zip](./passive3-rpi-hub75-adapter-fab.zip)
+
+This board is [shared on OSH Park][osh-passive3] (not affiliated).
+
+![Preview][rendering]
+
+[rendering]: ../../img/passive3-pcb.png
+[osh-passive3]: https://oshpark.com/shared_projects/FNAtZUsP
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter-cache.lib b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter-cache.lib
new file mode 100644
index 0000000..957fcee
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter-cache.lib
@@ -0,0 +1,218 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+<<<<<<< HEAD
+# CONN_01X01
+#
+DEF CONN_01X01 P 0 40 Y N 1 F N
+F0 "P" 0 100 50 H V C CNN
+F1 "CONN_01X01" 100 0 50 V V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+$FPLIST
+ Pin_Header_Straight_1X01
+ Pin_Header_Angled_1X01
+ Socket_Strip_Straight_1X01
+ Socket_Strip_Angled_1X01
+$ENDFPLIST
+DRAW
+S -50 5 10 -5 0 1 0 N
+S -50 50 50 -50 0 1 0 N
+X P1 1 -200 0 150 R 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+=======
+>>>>>>> d9ecea532afc911de3244f458589b6eadd051949
+# CONN_02X08
+#
+DEF CONN_02X08 P 0 1 Y N 1 F N
+F0 "P" 0 450 50 H V C CNN
+F1 "CONN_02X08" 0 0 50 V V C CNN
+F2 "" 0 -1200 60 H V C CNN
+F3 "" 0 -1200 60 H V C CNN
+$FPLIST
+ Pin_Header_Straight_2X08
+ Pin_Header_Angled_2X08
+ Socket_Strip_Straight_2X08
+ Socket_Strip_Angled_2X08
+$ENDFPLIST
+DRAW
+S -100 -345 -50 -355 0 1 0 N
+S -100 -245 -50 -255 0 1 0 N
+S -100 -145 -50 -155 0 1 0 N
+S -100 -45 -50 -55 0 1 0 N
+S -100 55 -50 45 0 1 0 N
+S -100 155 -50 145 0 1 0 N
+S -100 255 -50 245 0 1 0 N
+S -100 355 -50 345 0 1 0 N
+S -100 400 100 -400 0 1 0 N
+S 50 -345 100 -355 0 1 0 N
+S 50 -245 100 -255 0 1 0 N
+S 50 -145 100 -155 0 1 0 N
+S 50 -45 100 -55 0 1 0 N
+S 50 55 100 45 0 1 0 N
+S 50 155 100 145 0 1 0 N
+S 50 255 100 245 0 1 0 N
+S 50 355 100 345 0 1 0 N
+X P1 1 -250 350 150 R 50 50 1 1 P
+X P2 2 250 350 150 L 50 50 1 1 P
+X P3 3 -250 250 150 R 50 50 1 1 P
+X P4 4 250 250 150 L 50 50 1 1 P
+X P5 5 -250 150 150 R 50 50 1 1 P
+X P6 6 250 150 150 L 50 50 1 1 P
+X P7 7 -250 50 150 R 50 50 1 1 P
+X P8 8 250 50 150 L 50 50 1 1 P
+X P9 9 -250 -50 150 R 50 50 1 1 P
+X P10 10 250 -50 150 L 50 50 1 1 P
+X P11 11 -250 -150 150 R 50 50 1 1 P
+X P12 12 250 -150 150 L 50 50 1 1 P
+X P13 13 -250 -250 150 R 50 50 1 1 P
+X P14 14 250 -250 150 L 50 50 1 1 P
+X P15 15 -250 -350 150 R 50 50 1 1 P
+X P16 16 250 -350 150 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_02X20
+#
+DEF CONN_02X20 P 0 1 Y N 1 F N
+F0 "P" 0 1050 50 H V C CNN
+F1 "CONN_02X20" 0 0 50 V V C CNN
+F2 "" 0 -950 60 H V C CNN
+F3 "" 0 -950 60 H V C CNN
+$FPLIST
+ Pin_Header_Straight_2X20
+ Pin_Header_Angled_2X20
+ Socket_Strip_Straight_2X20
+ Socket_Strip_Angled_2X20
+$ENDFPLIST
+DRAW
+S -100 -945 -50 -955 0 1 0 N
+S -100 -845 -50 -855 0 1 0 N
+S -100 -745 -50 -755 0 1 0 N
+S -100 -645 -50 -655 0 1 0 N
+S -100 -545 -50 -555 0 1 0 N
+S -100 -445 -50 -455 0 1 0 N
+S -100 -345 -50 -355 0 1 0 N
+S -100 -245 -50 -255 0 1 0 N
+S -100 -145 -50 -155 0 1 0 N
+S -100 -45 -50 -55 0 1 0 N
+S -100 55 -50 45 0 1 0 N
+S -100 155 -50 145 0 1 0 N
+S -100 255 -50 245 0 1 0 N
+S -100 355 -50 345 0 1 0 N
+S -100 455 -50 445 0 1 0 N
+S -100 555 -50 545 0 1 0 N
+S -100 655 -50 645 0 1 0 N
+S -100 755 -50 745 0 1 0 N
+S -100 855 -50 845 0 1 0 N
+S -100 955 -50 945 0 1 0 N
+S -100 1000 100 -1000 0 1 0 N
+S 50 -945 100 -955 0 1 0 N
+S 50 -845 100 -855 0 1 0 N
+S 50 -745 100 -755 0 1 0 N
+S 50 -645 100 -655 0 1 0 N
+S 50 -545 100 -555 0 1 0 N
+S 50 -445 100 -455 0 1 0 N
+S 50 -345 100 -355 0 1 0 N
+S 50 -245 100 -255 0 1 0 N
+S 50 -145 100 -155 0 1 0 N
+S 50 -45 100 -55 0 1 0 N
+S 50 55 100 45 0 1 0 N
+S 50 155 100 145 0 1 0 N
+S 50 255 100 245 0 1 0 N
+S 50 355 100 345 0 1 0 N
+S 50 455 100 445 0 1 0 N
+S 50 555 100 545 0 1 0 N
+S 50 655 100 645 0 1 0 N
+S 50 755 100 745 0 1 0 N
+S 50 855 100 845 0 1 0 N
+S 50 955 100 945 0 1 0 N
+X P1 1 -250 950 150 R 50 50 1 1 P
+X P2 2 250 950 150 L 50 50 1 1 P
+X P3 3 -250 850 150 R 50 50 1 1 P
+X P4 4 250 850 150 L 50 50 1 1 P
+X P5 5 -250 750 150 R 50 50 1 1 P
+X P6 6 250 750 150 L 50 50 1 1 P
+X P7 7 -250 650 150 R 50 50 1 1 P
+X P8 8 250 650 150 L 50 50 1 1 P
+X P9 9 -250 550 150 R 50 50 1 1 P
+X P10 10 250 550 150 L 50 50 1 1 P
+X P20 20 250 50 150 L 50 50 1 1 P
+X P30 30 250 -450 150 L 50 50 1 1 P
+X P40 40 250 -950 150 L 50 50 1 1 P
+X P11 11 -250 450 150 R 50 50 1 1 P
+X P21 21 -250 -50 150 R 50 50 1 1 P
+X P31 31 -250 -550 150 R 50 50 1 1 P
+X P12 12 250 450 150 L 50 50 1 1 P
+X P22 22 250 -50 150 L 50 50 1 1 P
+X P32 32 250 -550 150 L 50 50 1 1 P
+X P13 13 -250 350 150 R 50 50 1 1 P
+X P23 23 -250 -150 150 R 50 50 1 1 P
+X P33 33 -250 -650 150 R 50 50 1 1 P
+X P14 14 250 350 150 L 50 50 1 1 P
+X P24 24 250 -150 150 L 50 50 1 1 P
+X P34 34 250 -650 150 L 50 50 1 1 P
+X P15 15 -250 250 150 R 50 50 1 1 P
+X P25 25 -250 -250 150 R 50 50 1 1 P
+X P35 35 -250 -750 150 R 50 50 1 1 P
+X P16 16 250 250 150 L 50 50 1 1 P
+X P26 26 250 -250 150 L 50 50 1 1 P
+X P36 36 250 -750 150 L 50 50 1 1 P
+X P17 17 -250 150 150 R 50 50 1 1 P
+X P27 27 -250 -350 150 R 50 50 1 1 P
+X P37 37 -250 -850 150 R 50 50 1 1 P
+X P18 18 250 150 150 L 50 50 1 1 P
+X P28 28 250 -350 150 L 50 50 1 1 P
+X P38 38 250 -850 150 L 50 50 1 1 P
+X P19 19 -250 50 150 R 50 50 1 1 P
+X P29 29 -250 -450 150 R 50 50 1 1 P
+X P39 39 -250 -950 150 R 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -250 50 H I C CNN
+F1 "GND" 0 -150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+<<<<<<< HEAD
+=======
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 50 H I C CNN
+F1 "PWR_FLAG" 0 180 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+>>>>>>> d9ecea532afc911de3244f458589b6eadd051949
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -150 50 H I C CNN
+F1 "VCC" 0 150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+C 0 75 25 0 1 0 N
+P 2 0 1 0 0 0 0 50 N
+X VCC 1 0 0 0 U 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter-fab.zip b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter-fab.zip
new file mode 100644
index 0000000..341a2d3
Binary files /dev/null and b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter-fab.zip differ
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.kicad_pcb b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.kicad_pcb
new file mode 100644
index 0000000..dc3a4c0
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.kicad_pcb
@@ -0,0 +1,1313 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-10-16 BZR 6271, Git e177d75)-product")
+
+ (general
+ (links 54)
+ (no_connects 0)
+ (area 84.621 35.449999 166.242334 59.772333)
+ (thickness 1.6)
+ (drawings 13)
+ (tracks 443)
+ (zones 0)
+ (modules 6)
+ (nets 28)
+ )
+
+ (page A4)
+ (layers
+ (0 F.Cu signal)
+ (31 B.Cu signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ (46 B.CrtYd user)
+ (47 F.CrtYd user)
+ (48 B.Fab user)
+ (49 F.Fab user)
+ )
+
+ (setup
+ (last_trace_width 0.254)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (segment_width 0.2)
+ (edge_width 0.1)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3)
+ (pcb_text_size 1.5 1.5)
+ (mod_edge_width 0.15)
+ (mod_text_size 1 1)
+ (mod_text_width 0.15)
+ (pad_size 4.064 4.064)
+ (pad_drill 3.048)
+ (pad_to_mask_clearance 0)
+ (aux_axis_origin 0 0)
+ (visible_elements FFFFEF7F)
+ (pcbplotparams
+ (layerselection 0x010f0_80000001)
+ (usegerberextensions true)
+ (excludeedgelayer true)
+ (linewidth 0.100000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory fab/))
+ )
+
+ (net 0 "")
+ (net 1 VCC)
+ (net 2 GND)
+ (net 3 p2_g1)
+ (net 4 p2_b1)
+ (net 5 strobe)
+ (net 6 p2_r1)
+ (net 7 p2_r2)
+ (net 8 p0_r1)
+ (net 9 p0_g1)
+ (net 10 OE)
+ (net 11 p0_b1)
+ (net 12 p0_r2)
+ (net 13 p0_g2)
+ (net 14 row_D)
+ (net 15 row_C)
+ (net 16 p0_b2)
+ (net 17 clock)
+ (net 18 row_B)
+ (net 19 row_A)
+ (net 20 p1_g1)
+ (net 21 p1_b1)
+ (net 22 p1_r1)
+ (net 23 p1_r2)
+ (net 24 p1_b2)
+ (net 25 p2_b2)
+ (net 26 p1_g2)
+ (net 27 p2_g2)
+
+ (net_class Default "This is the default net class."
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net OE)
+ (add_net clock)
+ (add_net p0_b1)
+ (add_net p0_b2)
+ (add_net p0_g1)
+ (add_net p0_g2)
+ (add_net p0_r1)
+ (add_net p0_r2)
+ (add_net p1_b1)
+ (add_net p1_b2)
+ (add_net p1_g1)
+ (add_net p1_g2)
+ (add_net p1_r1)
+ (add_net p1_r2)
+ (add_net p2_b1)
+ (add_net p2_b2)
+ (add_net p2_g1)
+ (add_net p2_g2)
+ (add_net p2_r1)
+ (add_net p2_r2)
+ (add_net row_A)
+ (add_net row_B)
+ (add_net row_C)
+ (add_net row_D)
+ (add_net strobe)
+ )
+
+ (net_class power ""
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net GND)
+ (add_net VCC)
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x20 (layer F.Cu) (tedit 54F3A96C) (tstamp 54F3AB07)
+ (at 107.95 43.18 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /54ECB2B7)
+ (fp_text reference P1 (at 0 -5.1 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X20 (at 0 -3.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 50.05) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 50.05) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 50.05) (end 4.3 50.05) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 49.53) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 49.53) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 49.53) (end -1.27 49.53) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 VCC))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 p2_g1))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 VCC))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 p2_b1))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 strobe))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 p2_r1))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 17 clock))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 OE))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 p0_g1))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 19 row_A))
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 18 row_B))
+ (pad 17 thru_hole oval (at 0 20.32 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at 2.54 20.32 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 15 row_C))
+ (pad 19 thru_hole oval (at 0 22.86 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 16 p0_b2))
+ (pad 20 thru_hole oval (at 2.54 22.86 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 21 thru_hole oval (at 0 25.4 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 13 p0_g2))
+ (pad 22 thru_hole oval (at 2.54 25.4 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 row_D))
+ (pad 23 thru_hole oval (at 0 27.94 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 p0_r1))
+ (pad 24 thru_hole oval (at 2.54 27.94 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 p0_r2))
+ (pad 25 thru_hole oval (at 0 30.48 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 26 thru_hole oval (at 2.54 30.48 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 11 p0_b1))
+ (pad 27 thru_hole oval (at 0 33.02 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 28 thru_hole oval (at 2.54 33.02 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 29 thru_hole oval (at 0 35.56 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 20 p1_g1))
+ (pad 30 thru_hole oval (at 2.54 35.56 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 31 thru_hole oval (at 0 38.1 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 21 p1_b1))
+ (pad 32 thru_hole oval (at 2.54 38.1 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 22 p1_r1))
+ (pad 33 thru_hole oval (at 0 40.64 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 26 p1_g2))
+ (pad 34 thru_hole oval (at 2.54 40.64 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 35 thru_hole oval (at 0 43.18 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 23 p1_r2))
+ (pad 36 thru_hole oval (at 2.54 43.18 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 27 p2_g2))
+ (pad 37 thru_hole oval (at 0 45.72 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 p2_r2))
+ (pad 38 thru_hole oval (at 2.54 45.72 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 24 p1_b2))
+ (pad 39 thru_hole oval (at 0 48.26 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 40 thru_hole oval (at 2.54 48.26 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 25 p2_b2))
+ (model Pin_Headers/Pin_Header_Straight_2x20.wrl
+ (at (xyz 0.05 -0.95 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x08 (layer F.Cu) (tedit 54F3ABF4) (tstamp 54F3AB27)
+ (at 88.9 54.61 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /54ECB236)
+ (fp_text reference Panel-1 (at 1.27 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X08 (at 0 -3.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 19.55) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 19.05) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 19.05) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 p0_r1))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 p0_g1))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 11 p0_b1))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 p0_r2))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 13 p0_g2))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 16 p0_b2))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 19 row_A))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 18 row_B))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 15 row_C))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 row_D))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 17 clock))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 strobe))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 OE))
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x08.wrl
+ (at (xyz 0.05 -0.35 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x08 (layer F.Cu) (tedit 54F3ABF0) (tstamp 54F3AB47)
+ (at 116.84 54.61 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /54ECE201)
+ (fp_text reference Panel-2 (at 1.27 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X08 (at 0 -3.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 19.55) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 19.05) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 19.05) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 22 p1_r1))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 20 p1_g1))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 21 p1_b1))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 23 p1_r2))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 26 p1_g2))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 24 p1_b2))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 19 row_A))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 18 row_B))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 15 row_C))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 row_D))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 17 clock))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 strobe))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 OE))
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x08.wrl
+ (at (xyz 0.05 -0.35 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x08 (layer F.Cu) (tedit 54F3ABEC) (tstamp 54F3AB67)
+ (at 144.78 54.61 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /54F3E6D5)
+ (fp_text reference Panel-3 (at 1.27 -2.54 90) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X08 (at 0 -3.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 19.55) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 19.05) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 19.05) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 p2_r1))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 p2_g1))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 p2_b1))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 p2_r2))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 27 p2_g2))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 25 p2_b2))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 19 row_A))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 18 row_B))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 15 row_C))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 row_D))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 17 clock))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 strobe))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 OE))
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x08.wrl
+ (at (xyz 0.05 -0.35 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Connect:1pin locked (layer F.Cu) (tedit 54F3F79E) (tstamp 54F3F77D)
+ (at 103.08 41.91)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54F43868)
+ (fp_text reference P2 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_01X01 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (module Connect:1pin locked (layer F.Cu) (tedit 54F3F75A) (tstamp 54F3F783)
+ (at 161.08 41.91)
+ (descr "module 1 pin (ou trou mecanique de percage)")
+ (tags DEV)
+ (path /54F43A29)
+ (fp_text reference P3 (at 0 -3.048) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_01X01 (at 0 2.794) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) (layers *.Cu *.Mask F.SilkS))
+ )
+
+ (gr_text %%gitversion%% (at 114.808 47.244) (layer B.SilkS)
+ (effects (font (size 1.2 1.2) (thickness 0.2)) (justify left mirror))
+ )
+ (gr_text github.com/hzeller/rpi-rgb-led-matrix (at 126 37.5) (layer F.SilkS)
+ (effects (font (size 2.2 2.2) (thickness 0.3)))
+ )
+ (gr_text "USB-ports ->" (at 165.1 45.72) (layer F.SilkS)
+ (effects (font (size 1.2 1.2) (thickness 0.3)) (justify right))
+ )
+ (gr_line (start 151.765 57.277) (end 155.575 57.277) (angle 90) (layer F.SilkS) (width 1.5))
+ (gr_line (start 95.885 57.277) (end 99.695 57.277) (angle 90) (layer F.SilkS) (width 1.5))
+ (gr_line (start 123.825 57.277) (end 127.635 57.277) (angle 90) (layer F.SilkS) (width 1.5))
+ (gr_text "Panel 3 (bottom)" (at 153.67 48.26) (layer F.SilkS)
+ (effects (font (size 1.5 1.5) (thickness 0.3)))
+ )
+ (gr_text "Panel 2 (middle)" (at 125.73 48.26) (layer F.SilkS)
+ (effects (font (size 1.5 1.5) (thickness 0.3)))
+ )
+ (gr_text "Panel 1 (top)" (at 97.79 48.26) (layer F.SilkS)
+ (effects (font (size 1.5 1.5) (thickness 0.3)))
+ )
+ (gr_line (start 85.5 58.5) (end 85.5 35.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556C01FD))
+ (gr_line (start 85.5 35.5) (end 165.5 35.5) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_line (start 165.5 35.5) (end 165.5 58.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556BCFD7))
+ (gr_line (start 165.5 58.5) (end 85.5 58.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556BCFD8))
+
+ (segment (start 110.49 40.64) (end 107.95 40.64) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 155.549 43.18) (end 155.549 44.4288) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 155.549 44.4288) (end 152.4 47.5778) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 152.4 47.5778) (end 152.4 52.07) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 135.8649 52.07) (end 137.4331 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 137.4331 52.07) (end 138.6781 50.825) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 138.6781 50.825) (end 146.6445 50.825) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 146.6445 50.825) (end 147.32 51.5005) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 148.59 40.64) (end 147.3451 40.64) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 138.43 43.18) (end 139.6749 43.18) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 139.6749 43.18) (end 139.6749 42.7131) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 139.6749 42.7131) (end 140.4529 41.9351) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 140.4529 41.9351) (end 146.5658 41.9351) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 146.5658 41.9351) (end 147.3451 41.1558) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 147.3451 41.1558) (end 147.3451 40.64) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 130.81 40.0705) (end 131.487 39.3935) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 131.487 39.3935) (end 136.4517 39.3935) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 136.4517 39.3935) (end 137.16 40.1018) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 137.16 40.1018) (end 137.16 41.1809) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 137.16 41.1809) (end 137.9142 41.9351) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 137.9142 41.9351) (end 138.43 41.9351) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 130.81 40.64) (end 130.81 40.0705) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 130.81 40.0705) (end 130.133 39.3935) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 130.133 39.3935) (end 125.1656 39.3935) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 125.1656 39.3935) (end 124.4349 40.1242) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 124.4349 40.1242) (end 124.4349 40.64) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 123.19 40.64) (end 124.4349 40.64) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 113.03 40.64) (end 114.2749 40.64) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 123.19 40.64) (end 121.9451 40.64) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 121.9451 40.64) (end 121.9451 40.1732) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 121.9451 40.1732) (end 121.1654 39.3935) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 121.1654 39.3935) (end 115.0056 39.3935) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 115.0056 39.3935) (end 114.2749 40.1242) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 114.2749 40.1242) (end 114.2749 40.64) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 119.38 52.07) (end 118.085 53.365) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 118.085 53.365) (end 116.1284 53.365) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 116.1284 53.365) (end 114.8334 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 114.8334 52.07) (end 106.68 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 138.43 43.18) (end 138.43 41.9351) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 130.81 40.64) (end 131.064 40.386) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 119.38 52.07) (end 120.6249 52.07) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.46 51.0015) (end 124.2714 50.8129) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.2714 50.8129) (end 121.3662 50.8129) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 121.3662 50.8129) (end 120.6249 51.5542) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 120.6249 51.5542) (end 120.6249 52.07) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.46 51.0015) (end 124.46 50.8251) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.46 52.07) (end 124.46 51.0015) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 123.19 40.64) (end 123.19 41.8849) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 123.19 41.8849) (end 123.6569 41.8849) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 123.6569 41.8849) (end 124.4349 42.6629) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.4349 42.6629) (end 124.4349 48.716) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.4349 48.716) (end 124.7135 48.9946) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.7135 48.9946) (end 124.7135 50.5716) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 124.7135 50.5716) (end 124.46 50.8251) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 123.19 40.64) (end 122.936 40.386) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 106.68 52.07) (end 105.4351 52.07) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 162.56 52.07) (end 162.56 50.8251) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 156.21 43.18) (end 156.21 44.4751) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 156.21 44.4751) (end 162.56 50.8251) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 155.6405 43.18) (end 155.549 43.18) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 147.32 51.5005) (end 148.0036 50.8169) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 148.0036 50.8169) (end 150.4178 50.8169) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 150.4178 50.8169) (end 151.1551 51.5542) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 151.1551 51.5542) (end 151.1551 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 147.32 52.07) (end 147.32 51.5005) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 134.62 52.07) (end 135.8649 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 152.4 52.07) (end 151.1551 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 96.52 52.07) (end 97.7649 52.07) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 105.4351 52.07) (end 105.4351 52.5368) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 105.4351 52.5368) (end 104.6319 53.34) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 104.6319 53.34) (end 98.5191 53.34) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 98.5191 53.34) (end 97.7649 52.5858) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 97.7649 52.5858) (end 97.7649 52.07) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 156.21 43.18) (end 155.6405 43.18) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 96.52 52.07) (end 95.2751 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 91.44 52.07) (end 92.6849 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 95.2751 52.07) (end 95.2751 52.5368) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 95.2751 52.5368) (end 94.4719 53.34) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 94.4719 53.34) (end 93.4391 53.34) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 93.4391 53.34) (end 92.6849 52.5858) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 92.6849 52.5858) (end 92.6849 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 148.59 40.64) (end 148.717 40.513) (width 0.254) (layer B.Cu) (net 2))
+ (segment (start 110.49 43.18) (end 110.49 41.9351) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 144.78 52.07) (end 142.9981 52.07) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 142.9981 52.07) (end 134.62 43.6919) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 134.62 43.6919) (end 134.62 42.6286) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 134.62 42.6286) (end 133.9264 41.935) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 133.9264 41.935) (end 132.8509 41.935) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 132.8509 41.935) (end 132.08 41.1641) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 132.08 41.1641) (end 132.08 40.1388) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 132.08 40.1388) (end 130.2519 38.3107) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 130.2519 38.3107) (end 113.5423 38.3107) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 113.5423 38.3107) (end 111.76 40.093) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 111.76 40.093) (end 111.76 41.1809) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 111.76 41.1809) (end 111.0058 41.9351) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 111.0058 41.9351) (end 110.49 41.9351) (width 0.254) (layer B.Cu) (net 3))
+ (segment (start 111.7851 43.18) (end 111.7851 43.6958) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 111.7851 43.6958) (end 111.0272 44.4537) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 111.0272 44.4537) (end 109.9544 44.4537) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 109.9544 44.4537) (end 109.195 43.6943) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 109.195 43.6943) (end 109.195 42.1039) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 109.195 42.1039) (end 109.0261 41.935) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 109.0261 41.935) (end 107.4676 41.935) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 107.4676 41.935) (end 106.6848 41.1522) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 106.6848 41.1522) (end 106.6848 40.1232) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 106.6848 40.1232) (end 107.9229 38.8851) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 107.9229 38.8851) (end 138.4398 38.8851) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 138.4398 38.8851) (end 139.7 40.1453) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 139.7 40.1453) (end 139.7 41.1427) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 139.7 41.1427) (end 140.4673 41.91) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 140.4673 41.91) (end 141.5214 41.91) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 141.5214 41.91) (end 142.215 42.6036) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 142.215 42.6036) (end 142.215 44.1727) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 147.32 53.3651) (end 146.8531 53.3651) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 146.8531 53.3651) (end 146.0751 52.5871) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 146.0751 52.5871) (end 146.0751 48.0328) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 146.0751 48.0328) (end 142.215 44.1727) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 147.32 54.61) (end 147.32 53.3651) (width 0.254) (layer B.Cu) (net 4))
+ (segment (start 113.03 43.18) (end 111.7851 43.18) (width 0.254) (layer F.Cu) (net 4))
+ (via (at 142.215 44.1727) (size 0.889) (layers F.Cu B.Cu) (net 4))
+ (segment (start 154.94 46.0566) (end 159.7085 50.8251) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 159.7085 50.8251) (end 160.02 50.8251) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 114.3251 43.18) (end 114.3251 43.6958) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 114.3251 43.6958) (end 112.9962 45.0247) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 112.9962 45.0247) (end 107.4657 45.0247) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 107.4657 45.0247) (end 106.1721 43.7311) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 106.1721 43.7311) (end 106.1721 39.857) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 106.1721 39.857) (end 107.6953 38.3338) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 107.6953 38.3338) (end 153.1668 38.3338) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 153.1668 38.3338) (end 154.94 40.107) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 154.94 40.107) (end 154.94 46.0566) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 115.57 43.18) (end 114.3251 43.18) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 114.3251 43.18) (end 114.3251 43.6469) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 114.3251 43.6469) (end 113.5471 44.4249) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 113.5471 44.4249) (end 111.7851 44.4249) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 111.7851 44.4249) (end 104.14 52.07) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 115.57 43.18) (end 114.3251 43.18) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 160.02 52.07) (end 160.02 50.8251) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 132.08 52.07) (end 134.308461 49.841539) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 154.94 46.0566) (end 151.1971 49.7995) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 134.308461 49.841539) (end 134.416483 49.841539) (width 0.254) (layer B.Cu) (net 5))
+ (via (at 135.0451 49.841539) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 5))
+ (segment (start 134.416483 49.841539) (end 135.0451 49.841539) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 151.1971 49.7995) (end 135.087139 49.7995) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 135.087139 49.7995) (end 135.0451 49.841539) (width 0.254) (layer F.Cu) (net 5))
+ (segment (start 143.5351 54.61) (end 142.9692 54.61) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 142.9692 54.61) (end 132.0799 43.7207) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 132.0799 43.7207) (end 132.0799 42.578) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 132.0799 42.578) (end 131.4119 41.91) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 131.4119 41.91) (end 130.3178 41.91) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 130.3178 41.91) (end 129.5321 41.1243) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 129.5321 41.1243) (end 129.5321 40.1322) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 129.5321 40.1322) (end 128.2189 38.819) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 128.2189 38.819) (end 118.1201 38.819) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 118.1201 38.819) (end 116.8149 40.1242) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 116.8149 40.1242) (end 116.8149 40.64) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 144.78 54.61) (end 143.5351 54.61) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 115.57 40.64) (end 116.8149 40.64) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 153.67 43.18) (end 153.67 44.4249) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 149.86 54.61) (end 149.86 53.3651) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 149.86 53.3651) (end 150.3269 53.3651) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 150.3269 53.3651) (end 151.1049 52.5871) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 151.1049 52.5871) (end 151.1049 46.99) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 151.1049 46.99) (end 153.67 44.4249) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 135.89 43.18) (end 137.1349 43.18) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 137.1349 43.18) (end 137.1349 42.7131) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 137.1349 42.7131) (end 137.9129 41.9351) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 137.9129 41.9351) (end 138.9108 41.9351) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 138.9108 41.9351) (end 139.7 41.1459) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 139.7 41.1459) (end 139.7 40.1384) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 139.7 40.1384) (end 136.3474 36.7858) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 136.3474 36.7858) (end 104.0481 36.7858) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 104.0481 36.7858) (end 90.1449 50.689) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 90.1449 50.689) (end 90.1449 52.5871) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 90.1449 52.5871) (end 89.3669 53.3651) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 89.3669 53.3651) (end 88.9 53.3651) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 88.9 54.61) (end 88.9 53.3651) (width 0.254) (layer B.Cu) (net 8))
+ (segment (start 123.19 43.18) (end 121.9451 43.18) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 88.9 52.07) (end 90.1449 52.07) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 90.1449 52.07) (end 90.1449 51.6032) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 90.1449 51.6032) (end 94.6753 47.0728) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 94.6753 47.0728) (end 118.5178 47.0728) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 118.5178 47.0728) (end 121.9451 43.6455) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 121.9451 43.6455) (end 121.9451 43.18) (width 0.254) (layer F.Cu) (net 9))
+ (segment (start 134.62 54.61) (end 135.8649 54.61) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 162.56 54.61) (end 161.3151 54.61) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 161.3151 54.61) (end 161.3151 54.1432) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 161.3151 54.1432) (end 160.5117 53.3398) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 160.5117 53.3398) (end 156.9716 53.3398) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 156.9716 53.3398) (end 156.21 54.1014) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 156.21 54.1014) (end 156.21 55.1707) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 156.21 55.1707) (end 155.5258 55.8549) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 155.5258 55.8549) (end 137.1098 55.8549) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 137.1098 55.8549) (end 135.8649 54.61) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 133.3751 54.61) (end 133.3751 54.0942) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 133.3751 54.0942) (end 132.5958 53.3149) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 132.5958 53.3149) (end 131.6048 53.3149) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 131.6048 53.3149) (end 130.81 54.1097) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 130.81 54.1097) (end 130.81 55.1382) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 130.81 55.1382) (end 129.5065 56.4417) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 129.5065 56.4417) (end 109.7566 56.4417) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 109.7566 56.4417) (end 107.9249 54.61) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 134.62 54.61) (end 133.3751 54.61) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 106.68 54.61) (end 107.9249 54.61) (width 0.254) (layer F.Cu) (net 10))
+ (segment (start 120.65 40.64) (end 120.65 41.8849) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 120.65 41.8849) (end 121.1168 41.8849) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 121.1168 41.8849) (end 121.92 42.6881) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 121.92 42.6881) (end 121.92 43.7177) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 121.92 43.7177) (end 111.0277 54.61) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 111.0277 54.61) (end 106.68 54.61) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 137.1851 40.64) (end 137.1851 40.1242) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 137.1851 40.1242) (end 134.355 37.2941) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 134.355 37.2941) (end 104.2702 37.2941) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 104.2702 37.2941) (end 92.6849 48.8794) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 92.6849 48.8794) (end 92.6849 52.5871) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 92.6849 52.5871) (end 91.9069 53.3651) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 91.9069 53.3651) (end 91.44 53.3651) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 138.43 40.64) (end 137.1851 40.64) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 91.44 54.61) (end 91.44 53.3651) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 134.6451 40.64) (end 134.6451 40.1731) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 134.6451 40.1731) (end 132.2744 37.8024) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 132.2744 37.8024) (end 111.5324 37.8024) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 111.5324 37.8024) (end 109.245 40.0898) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 109.245 40.0898) (end 109.245 41.1158) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 109.245 41.1158) (end 108.4564 41.9044) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 108.4564 41.9044) (end 106.9402 41.9044) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 106.9402 41.9044) (end 104.5212 44.3234) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 104.5212 44.3234) (end 102.4544 44.3234) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 102.4544 44.3234) (end 95.25 51.5278) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 95.25 51.5278) (end 95.25 52.6109) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 95.25 52.6109) (end 94.4958 53.3651) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 94.4958 53.3651) (end 93.98 53.3651) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 93.98 54.61) (end 93.98 53.3651) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 135.89 40.64) (end 134.6451 40.64) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 125.264795 44.424601) (end 124.903396 44.786) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 133.35 43.18) (end 132.055 41.885) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 97.2886 48.7614) (end 94.843599 51.206401) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 94.843599 51.206401) (end 93.98 52.07) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 127.7343 41.885) (end 126.974601 42.644699) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 124.903396 44.786) (end 121.5505 44.786) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 117.5751 48.7614) (end 97.2886 48.7614) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 121.5505 44.786) (end 117.5751 48.7614) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 126.974601 43.777409) (end 126.327409 44.424601) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 132.055 41.885) (end 127.7343 41.885) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 126.974601 42.644699) (end 126.974601 43.777409) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 126.327409 44.424601) (end 125.264795 44.424601) (width 0.254) (layer F.Cu) (net 13))
+ (segment (start 129.54 52.07) (end 130.7849 52.07) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 157.48 52.07) (end 156.2351 52.07) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 156.2351 52.07) (end 156.2351 52.5368) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 156.2351 52.5368) (end 155.4319 53.34) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 155.4319 53.34) (end 134.1278 53.34) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 134.1278 53.34) (end 133.35 52.5622) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 133.35 52.5622) (end 133.35 51.5787) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 133.35 51.5787) (end 132.5581 50.7868) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 132.5581 50.7868) (end 131.5523 50.7868) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 131.5523 50.7868) (end 130.7849 51.5542) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 130.7849 51.5542) (end 130.7849 52.07) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 134.62 41.91) (end 134.62 43.7219) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 133.422424 44.919476) (end 130.168622 44.919476) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 129.54 44.919481) (end 129.540005 44.919476) (width 0.254) (layer B.Cu) (net 14))
+ (segment (start 125.306864 45.8194) (end 125.685643 45.440621) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 129.54 52.07) (end 129.54 44.919481) (width 0.254) (layer B.Cu) (net 14))
+ (segment (start 125.685643 45.440621) (end 126.748257 45.440621) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 127.220915 44.967963) (end 129.491518 44.967963) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 133.35 40.64) (end 134.62 41.91) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 126.748257 45.440621) (end 127.220915 44.967963) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 102.8449 50.8251) (end 117.56 50.8251) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 134.62 43.7219) (end 133.422424 44.919476) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 129.491518 44.967963) (end 129.540005 44.919476) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 117.56 50.8251) (end 122.5657 45.8194) (width 0.254) (layer F.Cu) (net 14))
+ (via (at 129.540005 44.919476) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 14))
+ (segment (start 122.5657 45.8194) (end 125.306864 45.8194) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 130.168622 44.919476) (end 129.540005 44.919476) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 101.6 52.07) (end 102.8449 50.8251) (width 0.254) (layer F.Cu) (net 14))
+ (segment (start 157.48 54.61) (end 156.2351 54.61) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 156.2351 54.61) (end 156.2351 54.1432) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 156.2351 54.1432) (end 155.4319 53.34) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 155.4319 53.34) (end 154.4298 53.34) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 154.4298 53.34) (end 153.6682 54.1016) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 153.6682 54.1016) (end 153.6682 55.1289) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 153.6682 55.1289) (end 152.906 55.8911) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 152.906 55.8911) (end 131.5855 55.8911) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 131.5855 55.8911) (end 130.7849 55.0905) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 130.7849 55.0905) (end 130.7849 54.61) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 130.6578 54.61) (end 130.7849 54.61) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 129.54 54.61) (end 130.6578 54.61) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 101.6 54.61) (end 102.8449 54.61) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 129.54 54.61) (end 128.2951 54.61) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 128.2951 54.61) (end 128.2951 55.0768) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 128.2951 55.0768) (end 127.5169 55.855) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 127.5169 55.855) (end 111.8972 55.855) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 111.8972 55.855) (end 109.3822 53.34) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 109.3822 53.34) (end 103.5991 53.34) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 103.5991 53.34) (end 102.8449 54.0942) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 102.8449 54.0942) (end 102.8449 54.61) (width 0.254) (layer F.Cu) (net 15))
+ (segment (start 129.565 43.77701) (end 129.565 41.935) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 130.7849 54.61) (end 130.7849 44.99691) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 129.133599 41.503599) (end 128.27 40.64) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 129.565 41.935) (end 129.133599 41.503599) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 130.7849 44.99691) (end 129.565 43.77701) (width 0.254) (layer B.Cu) (net 15))
+ (segment (start 97.7649 53.3651) (end 97.383599 53.746401) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 100.33 51.5706) (end 100.33 52.6214) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 129.946401 44.043599) (end 129.248411 44.043599) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 102.6308 49.2698) (end 100.33 51.5706) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 122.2965 45.2944) (end 118.3211 49.2698) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 118.3211 49.2698) (end 102.6308 49.2698) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 97.383599 53.746401) (end 96.52 54.61) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 99.5863 53.3651) (end 97.7649 53.3651) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 130.81 43.18) (end 129.946401 44.043599) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 128.832057 44.459953) (end 127.010491 44.459953) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 125.11343 45.2944) (end 122.2965 45.2944) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 129.248411 44.043599) (end 128.832057 44.459953) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 126.537833 44.932611) (end 125.475219 44.932611) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 100.33 52.6214) (end 99.5863 53.3651) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 127.010491 44.459953) (end 126.537833 44.932611) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 125.475219 44.932611) (end 125.11343 45.2944) (width 0.254) (layer F.Cu) (net 16))
+ (segment (start 132.08 55.8549) (end 132.5883 56.3632) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 132.5883 56.3632) (end 157.4887 56.3632) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 157.4887 56.3632) (end 158.7751 55.0768) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 158.7751 55.0768) (end 158.7751 54.61) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 132.08 55.8549) (end 130.9188 57.0161) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 130.9188 57.0161) (end 107.2752 57.0161) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 107.2752 57.0161) (end 105.3849 55.1258) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 105.3849 55.1258) (end 105.3849 54.61) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 132.08 54.61) (end 132.08 55.8549) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 104.14 54.61) (end 105.3849 54.61) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 160.02 54.61) (end 158.7751 54.61) (width 0.254) (layer F.Cu) (net 17))
+ (segment (start 105.3849 54.61) (end 105.3849 54.1143) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 105.3849 54.1143) (end 106.1592 53.34) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 106.1592 53.34) (end 109.7133 53.34) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 109.7133 53.34) (end 119.4051 43.6482) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 119.4051 43.6482) (end 119.4051 43.18) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 104.14 54.61) (end 105.3849 54.61) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 120.65 43.18) (end 119.4051 43.18) (width 0.254) (layer B.Cu) (net 17))
+ (segment (start 125.73 40.64) (end 125.73 41.8849) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 127 52.07) (end 127 42.6391) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 127 42.6391) (end 126.2458 41.8849) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 126.2458 41.8849) (end 125.73 41.8849) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 125.73 40.64) (end 124.4851 40.64) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 99.06 52.07) (end 100.3049 52.07) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 100.3049 52.07) (end 100.3049 51.6031) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 100.3049 51.6031) (end 101.0829 50.8251) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 101.0829 50.8251) (end 104.6357 50.8251) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 104.6357 50.8251) (end 111.785 43.6758) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 111.785 43.6758) (end 111.785 42.5721) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 111.785 42.5721) (end 112.4721 41.885) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 112.4721 41.885) (end 118.6864 41.885) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 118.6864 41.885) (end 119.38 41.1914) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 119.38 41.1914) (end 119.38 40.0768) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 119.38 40.0768) (end 120.103 39.3538) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 120.103 39.3538) (end 123.7147 39.3538) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 123.7147 39.3538) (end 124.4851 40.1242) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 124.4851 40.1242) (end 124.4851 40.64) (width 0.254) (layer B.Cu) (net 18))
+ (segment (start 135.441341 50.66704) (end 134.07604 50.66704) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 134.07604 50.66704) (end 133.6796 50.2706) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 135.800481 50.3079) (end 135.441341 50.66704) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 127.863599 51.206401) (end 127 52.07) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 133.6796 50.2706) (end 128.7994 50.2706) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 154.94 52.07) (end 153.1779 50.3079) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 153.1779 50.3079) (end 135.800481 50.3079) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 128.7994 50.2706) (end 127.863599 51.206401) (width 0.254) (layer F.Cu) (net 18))
+ (segment (start 127 54.61) (end 128.2449 54.61) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 154.94 54.61) (end 153.1005 56.4495) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 153.1005 56.4495) (end 129.5686 56.4495) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 129.5686 56.4495) (end 128.2449 55.1258) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 128.2449 55.1258) (end 128.2449 54.61) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 125.73 43.18) (end 125.73 44.4249) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 125.7551 54.61) (end 125.7551 44.45) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 125.7551 44.45) (end 125.73 44.4249) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 125.8822 54.61) (end 125.7551 54.61) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 127 54.61) (end 125.8822 54.61) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 100.3049 54.61) (end 100.3049 55.1258) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 100.3049 55.1258) (end 101.0531 55.874) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 101.0531 55.874) (end 125.0069 55.874) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 125.0069 55.874) (end 125.7551 55.1258) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 125.7551 55.1258) (end 125.7551 54.61) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 99.06 54.61) (end 100.3049 54.61) (width 0.254) (layer B.Cu) (net 19))
+ (segment (start 118.061314 52.07) (end 116.84 52.07) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 143.51 43.18) (end 143.51 44.401314) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 118.0849 51.603) (end 118.0849 52.046414) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 125.368727 46.475971) (end 123.211928 46.475972) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 141.962683 45.948631) (end 125.896067 45.948631) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 143.51 44.401314) (end 141.962683 45.948631) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 125.896067 45.948631) (end 125.368727 46.475971) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 118.0849 52.046414) (end 118.061314 52.07) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 123.211928 46.475972) (end 118.0849 51.603) (width 0.254) (layer F.Cu) (net 20))
+ (segment (start 119.38 53.3651) (end 119.38 54.61) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 125.579151 46.983981) (end 124.626815 46.983981) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 144.8051 43.18) (end 144.8051 43.8705) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 120.6249 50.985896) (end 120.6249 52.5871) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 124.626815 46.983981) (end 120.6249 50.985896) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 144.8051 43.8705) (end 142.191619 46.483981) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 120.6249 52.5871) (end 119.8469 53.3651) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 146.05 43.18) (end 144.8051 43.18) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 142.191619 46.483981) (end 126.079151 46.483981) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 119.8469 53.3651) (end 119.38 53.3651) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 126.079151 46.483981) (end 125.579151 46.983981) (width 0.254) (layer F.Cu) (net 21))
+ (segment (start 122.989252 49.214669) (end 123.617869 49.214669) (width 0.254) (layer B.Cu) (net 22))
+ (segment (start 116.84 54.61) (end 117.9576 54.61) (width 0.254) (layer B.Cu) (net 22))
+ (segment (start 120.444531 49.214669) (end 122.989252 49.214669) (width 0.254) (layer B.Cu) (net 22))
+ (segment (start 118.0849 54.4827) (end 118.0849 51.5743) (width 0.254) (layer B.Cu) (net 22))
+ (via (at 123.617869 49.214669) (size 0.889) (drill 0.635) (layers F.Cu B.Cu) (net 22))
+ (segment (start 118.0849 51.5743) (end 120.444531 49.214669) (width 0.254) (layer B.Cu) (net 22))
+ (segment (start 117.9576 54.61) (end 118.0849 54.4827) (width 0.254) (layer B.Cu) (net 22))
+ (segment (start 126.289576 46.99199) (end 124.511396 48.77017) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 144.01081 46.99199) (end 126.289576 46.99199) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 147.32 43.6828) (end 144.01081 46.99199) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 124.062368 48.77017) (end 123.617869 49.214669) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 147.32 41.91) (end 147.32 43.6828) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 146.05 40.64) (end 147.32 41.91) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 124.511396 48.77017) (end 124.062368 48.77017) (width 0.254) (layer F.Cu) (net 22))
+ (segment (start 146.30199 48.00801) (end 150.266401 44.043599) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 121.92 54.61) (end 123.215399 53.314601) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 123.215399 53.314601) (end 123.215399 51.503035) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 126.710424 48.00801) (end 146.30199 48.00801) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 123.215399 51.503035) (end 126.710424 48.00801) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 150.266401 44.043599) (end 151.13 43.18) (width 0.254) (layer F.Cu) (net 23))
+ (segment (start 147.56388 48.51602) (end 152.4 43.6799) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 152.4 43.6799) (end 152.4 41.91) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 152.4 41.91) (end 152.806401 41.503599) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 124.46 54.61) (end 125.755399 53.314601) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 125.755399 53.314601) (end 125.755399 51.472591) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 125.755399 51.472591) (end 128.71197 48.51602) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 152.806401 41.503599) (end 153.67 40.64) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 128.71197 48.51602) (end 147.56388 48.51602) (width 0.254) (layer F.Cu) (net 24))
+ (segment (start 156.21 41.8849) (end 156.7258 41.8849) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 156.7258 41.8849) (end 157.505 42.6641) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 157.505 42.6641) (end 157.505 44.8643) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 157.505 44.8643) (end 153.6449 48.7244) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 153.6449 48.7244) (end 153.6449 52.5871) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 153.6449 52.5871) (end 152.8669 53.3651) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 152.8669 53.3651) (end 152.4 53.3651) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 156.21 40.64) (end 156.21 41.8849) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 152.4 54.61) (end 152.4 53.3651) (width 0.254) (layer B.Cu) (net 25))
+ (segment (start 123.000005 50.999995) (end 126.5 47.5) (width 0.254) (layer F.Cu) (net 26) (tstamp 557B169E))
+ (segment (start 122.793599 51.206401) (end 123.000005 50.999995) (width 0.254) (layer F.Cu) (net 26))
+ (segment (start 144.27 47.5) (end 148.59 43.18) (width 0.254) (layer F.Cu) (net 26))
+ (segment (start 126.5 47.5) (end 144.27 47.5) (width 0.254) (layer F.Cu) (net 26))
+ (segment (start 123.000005 51.000005) (end 123.000005 50.999995) (width 0.254) (layer F.Cu) (net 26) (tstamp 557B169D))
+ (segment (start 121.93001 52.07) (end 123.000005 51.000005) (width 0.254) (layer F.Cu) (net 26) (tstamp 557B1696))
+ (segment (start 121.92 52.07) (end 121.93001 52.07) (width 0.254) (layer F.Cu) (net 26))
+ (segment (start 149.86 41.91) (end 149.86 52.07) (width 0.254) (layer B.Cu) (net 27))
+ (segment (start 151.13 40.64) (end 149.86 41.91) (width 0.254) (layer B.Cu) (net 27))
+
+ (zone (net 2) (net_name GND) (layer F.Cu) (tstamp 556C027E) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 85.725 35.56) (xy 165.1 35.56) (xy 165.1 58.42) (xy 85.725 58.42)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 91.587 52.197) (xy 91.567 52.197) (xy 91.567 52.217) (xy 91.313 52.217) (xy 91.313 52.197)
+ (xy 91.293 52.197) (xy 91.293 51.943) (xy 91.313 51.943) (xy 91.313 51.923) (xy 91.567 51.923)
+ (xy 91.567 51.943) (xy 91.587 51.943) (xy 91.587 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 96.667 52.197) (xy 96.647 52.197) (xy 96.647 52.217) (xy 96.393 52.217) (xy 96.393 52.197)
+ (xy 96.373 52.197) (xy 96.373 51.943) (xy 96.393 51.943) (xy 96.393 51.923) (xy 96.647 51.923)
+ (xy 96.647 51.943) (xy 96.667 51.943) (xy 96.667 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.177 40.767) (xy 113.157 40.767) (xy 113.157 40.787) (xy 112.903 40.787) (xy 112.903 40.767)
+ (xy 112.883 40.767) (xy 112.883 40.513) (xy 112.903 40.513) (xy 112.903 40.493) (xy 113.157 40.493)
+ (xy 113.157 40.513) (xy 113.177 40.513) (xy 113.177 40.767)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 115.7673 53.139529) (xy 115.734277 53.145937) (xy 115.521473 53.285727) (xy 115.379023 53.49676) (xy 115.32896 53.7464)
+ (xy 115.32896 55.093) (xy 112.21283 55.093) (xy 109.921015 52.801185) (xy 109.673805 52.636004) (xy 109.3822 52.578)
+ (xy 108.065147 52.578) (xy 108.134968 52.429027) (xy 108.014469 52.197) (xy 106.807 52.197) (xy 106.807 52.217)
+ (xy 106.553 52.217) (xy 106.553 52.197) (xy 106.533 52.197) (xy 106.533 51.943) (xy 106.553 51.943)
+ (xy 106.553 51.923) (xy 106.807 51.923) (xy 106.807 51.943) (xy 108.014469 51.943) (xy 108.134968 51.710973)
+ (xy 108.076911 51.5871) (xy 115.431614 51.5871) (xy 115.3414 52.040641) (xy 115.3414 52.099359) (xy 115.455474 52.672848)
+ (xy 115.7673 53.139529)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 119.527 52.197) (xy 119.507 52.197) (xy 119.507 52.217) (xy 119.253 52.217) (xy 119.253 52.197)
+ (xy 119.233 52.197) (xy 119.233 51.943) (xy 119.253 51.943) (xy 119.253 51.923) (xy 119.507 51.923)
+ (xy 119.507 51.943) (xy 119.527 51.943) (xy 119.527 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 123.337 40.767) (xy 123.317 40.767) (xy 123.317 40.787) (xy 123.063 40.787) (xy 123.063 40.767)
+ (xy 123.043 40.767) (xy 123.043 40.513) (xy 123.063 40.513) (xy 123.063 40.493) (xy 123.317 40.493)
+ (xy 123.317 40.513) (xy 123.337 40.513) (xy 123.337 40.767)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 124.607 52.197) (xy 124.587 52.197) (xy 124.587 52.217) (xy 124.333 52.217) (xy 124.333 52.197)
+ (xy 124.313 52.197) (xy 124.313 51.943) (xy 124.333 51.943) (xy 124.333 51.923) (xy 124.587 51.923)
+ (xy 124.587 51.943) (xy 124.607 51.943) (xy 124.607 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 130.957 40.767) (xy 130.937 40.767) (xy 130.937 40.787) (xy 130.683 40.787) (xy 130.683 40.767)
+ (xy 130.663 40.767) (xy 130.663 40.513) (xy 130.683 40.513) (xy 130.683 40.493) (xy 130.937 40.493)
+ (xy 130.937 40.513) (xy 130.957 40.513) (xy 130.957 40.767)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 141.704214 45.129469) (xy 141.647052 45.186631) (xy 134.232899 45.186631) (xy 135.022258 44.397271) (xy 135.316511 44.593885)
+ (xy 135.89 44.707959) (xy 136.463489 44.593885) (xy 136.94967 44.269029) (xy 137.165663 43.945771) (xy 137.223179 44.06849)
+ (xy 137.655053 44.462688) (xy 138.070974 44.634958) (xy 138.303 44.513817) (xy 138.303 43.307) (xy 138.283 43.307)
+ (xy 138.283 43.053) (xy 138.303 43.053) (xy 138.303 43.033) (xy 138.557 43.033) (xy 138.557 43.053)
+ (xy 138.577 43.053) (xy 138.577 43.307) (xy 138.557 43.307) (xy 138.557 44.513817) (xy 138.789026 44.634958)
+ (xy 139.204947 44.462688) (xy 139.636821 44.06849) (xy 139.694336 43.945771) (xy 139.91033 44.269029) (xy 140.396511 44.593885)
+ (xy 140.97 44.707959) (xy 141.2455 44.653158) (xy 141.299311 44.783389) (xy 141.602714 45.087322) (xy 141.704214 45.129469)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 143.660909 51.0699) (xy 143.395474 51.467152) (xy 143.2814 52.040641) (xy 143.2814 52.099359) (xy 143.376607 52.578)
+ (xy 136.005147 52.578) (xy 136.074968 52.429027) (xy 135.954469 52.197) (xy 134.747 52.197) (xy 134.747 52.217)
+ (xy 134.493 52.217) (xy 134.493 52.197) (xy 134.473 52.197) (xy 134.473 51.943) (xy 134.493 51.943)
+ (xy 134.493 51.923) (xy 134.747 51.923) (xy 134.747 51.943) (xy 135.954469 51.943) (xy 136.074968 51.710973)
+ (xy 135.872077 51.278071) (xy 135.980156 51.205855) (xy 136.116111 51.0699) (xy 143.660909 51.0699)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 147.467 52.197) (xy 147.447 52.197) (xy 147.447 52.217) (xy 147.193 52.217) (xy 147.193 52.197)
+ (xy 147.173 52.197) (xy 147.173 51.943) (xy 147.193 51.943) (xy 147.193 51.923) (xy 147.447 51.923)
+ (xy 147.447 51.943) (xy 147.467 51.943) (xy 147.467 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 152.547 52.197) (xy 152.527 52.197) (xy 152.527 52.217) (xy 152.273 52.217) (xy 152.273 52.197)
+ (xy 152.253 52.197) (xy 152.253 51.943) (xy 152.273 51.943) (xy 152.273 51.923) (xy 152.527 51.923)
+ (xy 152.527 51.943) (xy 152.547 51.943) (xy 152.547 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 153.027557 39.272188) (xy 152.61033 39.550971) (xy 152.4 39.865751) (xy 152.18967 39.550971) (xy 151.703489 39.226115)
+ (xy 151.13 39.112041) (xy 150.556511 39.226115) (xy 150.07033 39.550971) (xy 149.854336 39.874228) (xy 149.796821 39.75151)
+ (xy 149.364947 39.357312) (xy 148.949026 39.185042) (xy 148.717 39.306183) (xy 148.717 40.513) (xy 148.737 40.513)
+ (xy 148.737 40.767) (xy 148.717 40.767) (xy 148.717 40.787) (xy 148.463 40.787) (xy 148.463 40.767)
+ (xy 148.443 40.767) (xy 148.443 40.513) (xy 148.463 40.513) (xy 148.463 39.306183) (xy 148.230974 39.185042)
+ (xy 147.815053 39.357312) (xy 147.383179 39.75151) (xy 147.325663 39.874228) (xy 147.10967 39.550971) (xy 146.623489 39.226115)
+ (xy 146.05 39.112041) (xy 145.476511 39.226115) (xy 144.99033 39.550971) (xy 144.78 39.865751) (xy 144.56967 39.550971)
+ (xy 144.083489 39.226115) (xy 143.51 39.112041) (xy 142.936511 39.226115) (xy 142.45033 39.550971) (xy 142.24 39.865751)
+ (xy 142.02967 39.550971) (xy 141.543489 39.226115) (xy 140.97 39.112041) (xy 140.396511 39.226115) (xy 140.073964 39.441634)
+ (xy 139.72813 39.0958) (xy 152.851169 39.0958) (xy 153.027557 39.272188)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 164.815 57.815) (xy 164.0586 57.815) (xy 164.0586 54.639359) (xy 164.0586 54.580641) (xy 163.944526 54.007152)
+ (xy 163.61967 53.520971) (xy 163.348839 53.340007) (xy 163.766821 52.95849) (xy 164.014968 52.429027) (xy 164.014968 51.710973)
+ (xy 163.766821 51.18151) (xy 163.747462 51.163839) (xy 163.747462 41.381828) (xy 163.342291 40.401239) (xy 162.592707 39.650345)
+ (xy 161.612827 39.243464) (xy 160.551828 39.242538) (xy 159.571239 39.647709) (xy 158.820345 40.397293) (xy 158.413464 41.377173)
+ (xy 158.412538 42.438172) (xy 158.817709 43.418761) (xy 159.567293 44.169655) (xy 160.547173 44.576536) (xy 161.608172 44.577462)
+ (xy 162.588761 44.172291) (xy 163.339655 43.422707) (xy 163.746536 42.442827) (xy 163.747462 41.381828) (xy 163.747462 51.163839)
+ (xy 163.334947 50.787312) (xy 162.919026 50.615042) (xy 162.687 50.736183) (xy 162.687 51.943) (xy 163.894469 51.943)
+ (xy 164.014968 51.710973) (xy 164.014968 52.429027) (xy 163.894469 52.197) (xy 162.687 52.197) (xy 162.687 52.217)
+ (xy 162.433 52.217) (xy 162.433 52.197) (xy 162.413 52.197) (xy 162.413 51.943) (xy 162.433 51.943)
+ (xy 162.433 50.736183) (xy 162.200974 50.615042) (xy 161.785053 50.787312) (xy 161.353179 51.18151) (xy 161.295663 51.304228)
+ (xy 161.07967 50.980971) (xy 160.772129 50.775479) (xy 160.723996 50.533495) (xy 160.558815 50.286285) (xy 160.311605 50.121104)
+ (xy 160.025156 50.064125) (xy 157.664968 47.703937) (xy 157.664968 43.539027) (xy 157.544469 43.307) (xy 156.337 43.307)
+ (xy 156.337 44.513817) (xy 156.569026 44.634958) (xy 156.984947 44.462688) (xy 157.416821 44.06849) (xy 157.664968 43.539027)
+ (xy 157.664968 47.703937) (xy 155.702 45.740969) (xy 155.702 44.573254) (xy 155.850974 44.634958) (xy 156.083 44.513817)
+ (xy 156.083 43.307) (xy 156.063 43.307) (xy 156.063 43.053) (xy 156.083 43.053) (xy 156.083 43.033)
+ (xy 156.337 43.033) (xy 156.337 43.053) (xy 157.544469 43.053) (xy 157.664968 42.820973) (xy 157.416821 42.29151)
+ (xy 156.998839 41.909992) (xy 157.26967 41.729029) (xy 157.594526 41.242848) (xy 157.7086 40.669359) (xy 157.7086 40.610641)
+ (xy 157.594526 40.037152) (xy 157.26967 39.550971) (xy 156.783489 39.226115) (xy 156.21 39.112041) (xy 155.636511 39.226115)
+ (xy 155.336923 39.426292) (xy 153.705615 37.794985) (xy 153.458405 37.629804) (xy 153.1668 37.5718) (xy 107.6953 37.5718)
+ (xy 107.403695 37.629804) (xy 107.156485 37.794985) (xy 105.633285 39.318185) (xy 105.468104 39.565395) (xy 105.4101 39.857)
+ (xy 105.4101 40.565349) (xy 105.342291 40.401239) (xy 104.592707 39.650345) (xy 103.612827 39.243464) (xy 102.551828 39.242538)
+ (xy 101.571239 39.647709) (xy 100.820345 40.397293) (xy 100.413464 41.377173) (xy 100.412538 42.438172) (xy 100.817709 43.418761)
+ (xy 101.567293 44.169655) (xy 102.547173 44.576536) (xy 103.608172 44.577462) (xy 104.588761 44.172291) (xy 105.339655 43.422707)
+ (xy 105.4101 43.253056) (xy 105.4101 43.7311) (xy 105.468104 44.022705) (xy 105.633285 44.269915) (xy 106.926885 45.563516)
+ (xy 107.075076 45.662534) (xy 107.174095 45.728696) (xy 107.174096 45.728696) (xy 107.4657 45.7867) (xy 112.9962 45.7867)
+ (xy 112.9962 45.786699) (xy 113.287804 45.728696) (xy 113.287805 45.728696) (xy 113.535015 45.563515) (xy 114.701659 44.396871)
+ (xy 114.996511 44.593885) (xy 115.57 44.707959) (xy 116.143489 44.593885) (xy 116.62967 44.269029) (xy 116.84 43.954248)
+ (xy 117.05033 44.269029) (xy 117.536511 44.593885) (xy 118.11 44.707959) (xy 118.683489 44.593885) (xy 119.16967 44.269029)
+ (xy 119.38 43.954248) (xy 119.59033 44.269029) (xy 119.982141 44.530828) (xy 118.20217 46.3108) (xy 94.6753 46.3108)
+ (xy 94.383695 46.368804) (xy 94.136485 46.533985) (xy 89.797714 50.872755) (xy 89.473489 50.656115) (xy 88.9 50.542041)
+ (xy 88.326511 50.656115) (xy 87.84033 50.980971) (xy 87.515474 51.467152) (xy 87.4014 52.040641) (xy 87.4014 52.099359)
+ (xy 87.515474 52.672848) (xy 87.8273 53.139529) (xy 87.794277 53.145937) (xy 87.581473 53.285727) (xy 87.439023 53.49676)
+ (xy 87.38896 53.7464) (xy 87.38896 55.4736) (xy 87.435937 55.715723) (xy 87.575727 55.928527) (xy 87.78676 56.070977)
+ (xy 88.0364 56.12104) (xy 89.7636 56.12104) (xy 90.005723 56.074063) (xy 90.218527 55.934273) (xy 90.360977 55.72324)
+ (xy 90.369179 55.68234) (xy 90.38033 55.699029) (xy 90.866511 56.023885) (xy 91.44 56.137959) (xy 92.013489 56.023885)
+ (xy 92.49967 55.699029) (xy 92.71 55.384248) (xy 92.92033 55.699029) (xy 93.406511 56.023885) (xy 93.98 56.137959)
+ (xy 94.553489 56.023885) (xy 95.03967 55.699029) (xy 95.25 55.384248) (xy 95.46033 55.699029) (xy 95.946511 56.023885)
+ (xy 96.52 56.137959) (xy 97.093489 56.023885) (xy 97.57967 55.699029) (xy 97.79 55.384248) (xy 98.00033 55.699029)
+ (xy 98.486511 56.023885) (xy 99.06 56.137959) (xy 99.633489 56.023885) (xy 100.11967 55.699029) (xy 100.33 55.384248)
+ (xy 100.54033 55.699029) (xy 101.026511 56.023885) (xy 101.6 56.137959) (xy 102.173489 56.023885) (xy 102.65967 55.699029)
+ (xy 102.87 55.384248) (xy 103.08033 55.699029) (xy 103.566511 56.023885) (xy 104.14 56.137959) (xy 104.713489 56.023885)
+ (xy 105.008341 55.826871) (xy 106.736385 57.554915) (xy 106.983595 57.720096) (xy 106.983596 57.720096) (xy 107.2752 57.7781)
+ (xy 130.9188 57.7781) (xy 130.9188 57.778099) (xy 131.210404 57.720096) (xy 131.210405 57.720096) (xy 131.457615 57.554915)
+ (xy 132.086069 56.92646) (xy 132.197676 57.001034) (xy 132.296695 57.067196) (xy 132.296696 57.067196) (xy 132.5883 57.1252)
+ (xy 157.4887 57.1252) (xy 157.4887 57.125199) (xy 157.780304 57.067196) (xy 157.780305 57.067196) (xy 158.027515 56.902015)
+ (xy 159.122286 55.807244) (xy 159.446511 56.023885) (xy 160.02 56.137959) (xy 160.593489 56.023885) (xy 161.07967 55.699029)
+ (xy 161.29 55.384248) (xy 161.50033 55.699029) (xy 161.986511 56.023885) (xy 162.56 56.137959) (xy 163.133489 56.023885)
+ (xy 163.61967 55.699029) (xy 163.944526 55.212848) (xy 164.0586 54.639359) (xy 164.0586 57.815) (xy 86.185 57.815)
+ (xy 86.185 36.185) (xy 164.815 36.185) (xy 164.815 57.815)
+ )
+ )
+ )
+ (zone (net 2) (net_name GND) (layer B.Cu) (tstamp 556C029C) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 85.725 35.56) (xy 165.1 35.56) (xy 165.1 58.42) (xy 85.725 58.42)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 91.9229 50.666349) (xy 91.799026 50.615042) (xy 91.567 50.736183) (xy 91.567 51.943) (xy 91.587 51.943)
+ (xy 91.587 52.197) (xy 91.567 52.197) (xy 91.567 52.217) (xy 91.313 52.217) (xy 91.313 52.197)
+ (xy 91.293 52.197) (xy 91.293 51.943) (xy 91.313 51.943) (xy 91.313 50.736183) (xy 91.222563 50.688966)
+ (xy 91.9229 49.98863) (xy 91.9229 50.666349)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 96.667 52.197) (xy 96.647 52.197) (xy 96.647 52.217) (xy 96.393 52.217) (xy 96.393 52.197)
+ (xy 96.373 52.197) (xy 96.373 51.943) (xy 96.393 51.943) (xy 96.393 51.923) (xy 96.647 51.923)
+ (xy 96.647 51.943) (xy 96.667 51.943) (xy 96.667 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.177 40.767) (xy 113.157 40.767) (xy 113.157 40.787) (xy 112.903 40.787) (xy 112.903 40.767)
+ (xy 112.883 40.767) (xy 112.883 40.513) (xy 112.903 40.513) (xy 112.903 40.493) (xy 113.157 40.493)
+ (xy 113.157 40.513) (xy 113.177 40.513) (xy 113.177 40.767)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 117.443759 44.53191) (xy 109.39767 52.578) (xy 108.065147 52.578) (xy 108.134968 52.429027) (xy 108.014469 52.197)
+ (xy 106.807 52.197) (xy 106.807 52.217) (xy 106.553 52.217) (xy 106.553 52.197) (xy 106.533 52.197)
+ (xy 106.533 51.943) (xy 106.553 51.943) (xy 106.553 51.923) (xy 106.807 51.923) (xy 106.807 51.943)
+ (xy 108.014469 51.943) (xy 108.134968 51.710973) (xy 107.886821 51.18151) (xy 107.454947 50.787312) (xy 107.039026 50.615042)
+ (xy 106.807002 50.736181) (xy 106.807002 50.5714) (xy 106.716228 50.5714) (xy 112.100729 45.1869) (xy 113.5471 45.1869)
+ (xy 113.5471 45.186899) (xy 113.838704 45.128896) (xy 113.838705 45.128896) (xy 114.085915 44.963715) (xy 114.672345 44.377284)
+ (xy 114.996511 44.593885) (xy 115.57 44.707959) (xy 116.143489 44.593885) (xy 116.62967 44.269029) (xy 116.84 43.954248)
+ (xy 117.05033 44.269029) (xy 117.443759 44.53191)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 119.527 52.197) (xy 119.507 52.197) (xy 119.507 52.217) (xy 119.253 52.217) (xy 119.253 52.197)
+ (xy 119.233 52.197) (xy 119.233 51.943) (xy 119.253 51.943) (xy 119.253 51.923) (xy 119.507 51.923)
+ (xy 119.507 51.943) (xy 119.527 51.943) (xy 119.527 52.197)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 123.337 40.767) (xy 123.317 40.767) (xy 123.317 40.787) (xy 123.063 40.787) (xy 123.063 40.767)
+ (xy 123.043 40.767) (xy 123.043 40.513) (xy 123.063 40.513) (xy 123.063 40.493) (xy 123.317 40.493)
+ (xy 123.317 40.513) (xy 123.337 40.513) (xy 123.337 40.767)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 124.9931 50.687141) (xy 124.819026 50.615042) (xy 124.587 50.736183) (xy 124.587 51.943) (xy 124.607 51.943)
+ (xy 124.607 52.197) (xy 124.587 52.197) (xy 124.587 52.217) (xy 124.333 52.217) (xy 124.333 52.197)
+ (xy 124.313 52.197) (xy 124.313 51.943) (xy 124.333 51.943) (xy 124.333 50.736183) (xy 124.100974 50.615042)
+ (xy 123.685053 50.787312) (xy 123.253179 51.18151) (xy 123.195663 51.304228) (xy 122.97967 50.980971) (xy 122.493489 50.656115)
+ (xy 121.92 50.542041) (xy 121.346511 50.656115) (xy 120.86033 50.980971) (xy 120.644336 51.304228) (xy 120.586821 51.18151)
+ (xy 120.154947 50.787312) (xy 120.009684 50.727145) (xy 120.76016 49.976669) (xy 122.853227 49.976669) (xy 123.005583 50.129291)
+ (xy 123.402201 50.293982) (xy 123.831653 50.294356) (xy 124.228558 50.130358) (xy 124.532491 49.826955) (xy 124.697182 49.430337)
+ (xy 124.697556 49.000885) (xy 124.533558 48.60398) (xy 124.230155 48.300047) (xy 123.833537 48.135356) (xy 123.404085 48.134982)
+ (xy 123.00718 48.29898) (xy 122.853222 48.452669) (xy 120.444531 48.452669) (xy 120.152926 48.510673) (xy 119.905716 48.675854)
+ (xy 117.72039 50.861179) (xy 117.413489 50.656115) (xy 116.84 50.542041) (xy 116.266511 50.656115) (xy 115.78033 50.980971)
+ (xy 115.455474 51.467152) (xy 115.3414 52.040641) (xy 115.3414 52.099359) (xy 115.455474 52.672848) (xy 115.7673 53.139529)
+ (xy 115.734277 53.145937) (xy 115.521473 53.285727) (xy 115.379023 53.49676) (xy 115.32896 53.7464) (xy 115.32896 55.112)
+ (xy 111.60333 55.112) (xy 122.319741 44.395589) (xy 122.616511 44.593885) (xy 123.19 44.707959) (xy 123.763489 44.593885)
+ (xy 124.24967 44.269029) (xy 124.46 43.954248) (xy 124.67033 44.269029) (xy 124.97787 44.47452) (xy 124.9931 44.551085)
+ (xy 124.9931 50.687141)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 130.957 40.767) (xy 130.937 40.767) (xy 130.937 40.787) (xy 130.683 40.787) (xy 130.683 40.767)
+ (xy 130.663 40.767) (xy 130.663 40.513) (xy 130.683 40.513) (xy 130.683 40.493) (xy 130.937 40.493)
+ (xy 130.937 40.513) (xy 130.957 40.513) (xy 130.957 40.767)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 142.410669 55.1291) (xy 136.021184 55.1291) (xy 136.1186 54.639359) (xy 136.1186 54.580641) (xy 136.004526 54.007152)
+ (xy 135.67967 53.520971) (xy 135.408839 53.340007) (xy 135.826821 52.95849) (xy 136.074968 52.429027) (xy 135.954469 52.197)
+ (xy 134.747 52.197) (xy 134.747 52.217) (xy 134.493 52.217) (xy 134.493 52.197) (xy 134.473 52.197)
+ (xy 134.473 51.943) (xy 134.493 51.943) (xy 134.493 51.923) (xy 134.747 51.923) (xy 134.747 51.943)
+ (xy 135.954469 51.943) (xy 136.074968 51.710973) (xy 135.826821 51.18151) (xy 135.453541 50.840794) (xy 135.655789 50.757228)
+ (xy 135.959722 50.453825) (xy 136.124413 50.057207) (xy 136.124787 49.627755) (xy 135.960789 49.23085) (xy 135.657386 48.926917)
+ (xy 135.260768 48.762226) (xy 134.831316 48.761852) (xy 134.434411 48.92585) (xy 134.273483 49.086496) (xy 134.016856 49.137543)
+ (xy 133.917837 49.203704) (xy 133.769646 49.302723) (xy 132.455614 50.616755) (xy 132.08 50.542041) (xy 131.5469 50.648081)
+ (xy 131.5469 44.99691) (xy 131.488896 44.705305) (xy 131.404891 44.579584) (xy 131.6784 44.39683) (xy 142.410669 55.1291)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 145.3131 50.648081) (xy 144.78 50.542041) (xy 144.206511 50.656115) (xy 143.72033 50.980971) (xy 143.501816 51.308)
+ (xy 143.31373 51.308) (xy 136.54509 44.53936) (xy 136.94967 44.269029) (xy 137.165663 43.945771) (xy 137.223179 44.06849)
+ (xy 137.655053 44.462688) (xy 138.070974 44.634958) (xy 138.303 44.513817) (xy 138.303 43.307) (xy 138.283 43.307)
+ (xy 138.283 43.053) (xy 138.303 43.053) (xy 138.303 43.033) (xy 138.557 43.033) (xy 138.557 43.053)
+ (xy 138.577 43.053) (xy 138.577 43.307) (xy 138.557 43.307) (xy 138.557 44.513817) (xy 138.789026 44.634958)
+ (xy 139.204947 44.462688) (xy 139.636821 44.06849) (xy 139.694336 43.945771) (xy 139.91033 44.269029) (xy 140.396511 44.593885)
+ (xy 140.97 44.707959) (xy 141.2455 44.653158) (xy 141.299311 44.783389) (xy 141.602714 45.087322) (xy 141.999332 45.252013)
+ (xy 142.216872 45.252202) (xy 145.3131 48.34843) (xy 145.3131 50.648081)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 149.098 50.782074) (xy 148.80033 50.980971) (xy 148.584336 51.304228) (xy 148.526821 51.18151) (xy 148.094947 50.787312)
+ (xy 147.679026 50.615042) (xy 147.447 50.736183) (xy 147.447 51.943) (xy 147.467 51.943) (xy 147.467 52.197)
+ (xy 147.447 52.197) (xy 147.447 52.217) (xy 147.193 52.217) (xy 147.193 52.197) (xy 147.173 52.197)
+ (xy 147.173 51.943) (xy 147.193 51.943) (xy 147.193 50.736183) (xy 146.960974 50.615042) (xy 146.8371 50.666349)
+ (xy 146.8371 48.0328) (xy 146.779096 47.741196) (xy 146.779096 47.741195) (xy 146.712934 47.642176) (xy 146.613916 47.493985)
+ (xy 143.775148 44.655217) (xy 144.083489 44.593885) (xy 144.56967 44.269029) (xy 144.78 43.954248) (xy 144.99033 44.269029)
+ (xy 145.476511 44.593885) (xy 146.05 44.707959) (xy 146.623489 44.593885) (xy 147.10967 44.269029) (xy 147.32 43.954248)
+ (xy 147.53033 44.269029) (xy 148.016511 44.593885) (xy 148.59 44.707959) (xy 149.098 44.606911) (xy 149.098 50.782074)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 156.718707 44.572961) (xy 153.106085 48.185585) (xy 152.940904 48.432795) (xy 152.8829 48.7244) (xy 152.8829 50.666349)
+ (xy 152.759026 50.615042) (xy 152.527 50.736183) (xy 152.527 51.943) (xy 152.547 51.943) (xy 152.547 52.197)
+ (xy 152.527 52.197) (xy 152.527 52.217) (xy 152.273 52.217) (xy 152.273 52.197) (xy 152.253 52.197)
+ (xy 152.253 51.943) (xy 152.273 51.943) (xy 152.273 50.736183) (xy 152.040974 50.615042) (xy 151.8669 50.687141)
+ (xy 151.8669 47.30563) (xy 154.208815 44.963716) (xy 154.208815 44.963715) (xy 154.373996 44.716505) (xy 154.422129 44.47452)
+ (xy 154.72967 44.269029) (xy 154.945663 43.945771) (xy 155.003179 44.06849) (xy 155.435053 44.462688) (xy 155.850974 44.634958)
+ (xy 156.083 44.513817) (xy 156.083 43.307) (xy 156.063 43.307) (xy 156.063 43.053) (xy 156.083 43.053)
+ (xy 156.083 43.033) (xy 156.337 43.033) (xy 156.337 43.053) (xy 156.357 43.053) (xy 156.357 43.307)
+ (xy 156.337 43.307) (xy 156.337 44.513817) (xy 156.569026 44.634958) (xy 156.718707 44.572961)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 164.815 57.815) (xy 86.185 57.815) (xy 86.185 36.185) (xy 103.602051 36.185) (xy 103.509285 36.246985)
+ (xy 89.606085 50.150185) (xy 89.440904 50.397395) (xy 89.39264 50.640033) (xy 88.9 50.542041) (xy 88.326511 50.656115)
+ (xy 87.84033 50.980971) (xy 87.515474 51.467152) (xy 87.4014 52.040641) (xy 87.4014 52.099359) (xy 87.515474 52.672848)
+ (xy 87.8273 53.139529) (xy 87.794277 53.145937) (xy 87.581473 53.285727) (xy 87.439023 53.49676) (xy 87.38896 53.7464)
+ (xy 87.38896 55.4736) (xy 87.435937 55.715723) (xy 87.575727 55.928527) (xy 87.78676 56.070977) (xy 88.0364 56.12104)
+ (xy 89.7636 56.12104) (xy 90.005723 56.074063) (xy 90.218527 55.934273) (xy 90.360977 55.72324) (xy 90.369179 55.68234)
+ (xy 90.38033 55.699029) (xy 90.866511 56.023885) (xy 91.44 56.137959) (xy 92.013489 56.023885) (xy 92.49967 55.699029)
+ (xy 92.71 55.384248) (xy 92.92033 55.699029) (xy 93.406511 56.023885) (xy 93.98 56.137959) (xy 94.553489 56.023885)
+ (xy 95.03967 55.699029) (xy 95.25 55.384248) (xy 95.46033 55.699029) (xy 95.946511 56.023885) (xy 96.52 56.137959)
+ (xy 97.093489 56.023885) (xy 97.57967 55.699029) (xy 97.79 55.384248) (xy 98.00033 55.699029) (xy 98.486511 56.023885)
+ (xy 99.06 56.137959) (xy 99.633489 56.023885) (xy 99.92834 55.826871) (xy 100.514285 56.412816) (xy 100.761495 56.577996)
+ (xy 100.761496 56.577997) (xy 101.0531 56.636) (xy 125.0069 56.636) (xy 125.0069 56.635999) (xy 125.298504 56.577996)
+ (xy 125.298505 56.577996) (xy 125.545715 56.412815) (xy 126.131659 55.826871) (xy 126.426511 56.023885) (xy 127 56.137959)
+ (xy 127.573489 56.023885) (xy 127.86834 55.826871) (xy 129.029784 56.988315) (xy 129.029785 56.988315) (xy 129.276995 57.153496)
+ (xy 129.5686 57.2115) (xy 153.1005 57.2115) (xy 153.1005 57.211499) (xy 153.392104 57.153496) (xy 153.392105 57.153496)
+ (xy 153.639315 56.988315) (xy 154.564385 56.063244) (xy 154.94 56.137959) (xy 155.513489 56.023885) (xy 155.99967 55.699029)
+ (xy 156.21 55.384248) (xy 156.42033 55.699029) (xy 156.906511 56.023885) (xy 157.48 56.137959) (xy 158.053489 56.023885)
+ (xy 158.53967 55.699029) (xy 158.75 55.384248) (xy 158.96033 55.699029) (xy 159.446511 56.023885) (xy 160.02 56.137959)
+ (xy 160.593489 56.023885) (xy 161.07967 55.699029) (xy 161.29 55.384248) (xy 161.50033 55.699029) (xy 161.986511 56.023885)
+ (xy 162.56 56.137959) (xy 163.133489 56.023885) (xy 163.61967 55.699029) (xy 163.944526 55.212848) (xy 164.0586 54.639359)
+ (xy 164.0586 54.580641) (xy 163.944526 54.007152) (xy 163.61967 53.520971) (xy 163.348839 53.340007) (xy 163.766821 52.95849)
+ (xy 164.014968 52.429027) (xy 164.014968 51.710973) (xy 163.766821 51.18151) (xy 163.747462 51.163839) (xy 163.747462 41.381828)
+ (xy 163.342291 40.401239) (xy 162.592707 39.650345) (xy 161.612827 39.243464) (xy 160.551828 39.242538) (xy 159.571239 39.647709)
+ (xy 158.820345 40.397293) (xy 158.413464 41.377173) (xy 158.412538 42.438172) (xy 158.817709 43.418761) (xy 159.567293 44.169655)
+ (xy 160.547173 44.576536) (xy 161.608172 44.577462) (xy 162.588761 44.172291) (xy 163.339655 43.422707) (xy 163.746536 42.442827)
+ (xy 163.747462 41.381828) (xy 163.747462 51.163839) (xy 163.334947 50.787312) (xy 162.919026 50.615042) (xy 162.687 50.736183)
+ (xy 162.687 51.943) (xy 163.894469 51.943) (xy 164.014968 51.710973) (xy 164.014968 52.429027) (xy 163.894469 52.197)
+ (xy 162.687 52.197) (xy 162.687 52.217) (xy 162.433 52.217) (xy 162.433 52.197) (xy 162.413 52.197)
+ (xy 162.413 51.943) (xy 162.433 51.943) (xy 162.433 50.736183) (xy 162.200974 50.615042) (xy 161.785053 50.787312)
+ (xy 161.353179 51.18151) (xy 161.295663 51.304228) (xy 161.07967 50.980971) (xy 160.593489 50.656115) (xy 160.02 50.542041)
+ (xy 159.446511 50.656115) (xy 158.96033 50.980971) (xy 158.75 51.295751) (xy 158.53967 50.980971) (xy 158.053489 50.656115)
+ (xy 157.48 50.542041) (xy 156.906511 50.656115) (xy 156.42033 50.980971) (xy 156.21 51.295751) (xy 155.99967 50.980971)
+ (xy 155.513489 50.656115) (xy 154.94 50.542041) (xy 154.4069 50.648081) (xy 154.4069 49.04003) (xy 158.043815 45.403115)
+ (xy 158.043816 45.403115) (xy 158.142834 45.254923) (xy 158.208996 45.155905) (xy 158.208996 45.155904) (xy 158.267 44.8643)
+ (xy 158.267 42.6641) (xy 158.208996 42.372495) (xy 158.043815 42.125285) (xy 158.043815 42.125284) (xy 157.421031 41.502501)
+ (xy 157.594526 41.242848) (xy 157.7086 40.669359) (xy 157.7086 40.610641) (xy 157.594526 40.037152) (xy 157.26967 39.550971)
+ (xy 156.783489 39.226115) (xy 156.21 39.112041) (xy 155.636511 39.226115) (xy 155.15033 39.550971) (xy 154.94 39.865751)
+ (xy 154.72967 39.550971) (xy 154.243489 39.226115) (xy 153.67 39.112041) (xy 153.096511 39.226115) (xy 152.61033 39.550971)
+ (xy 152.4 39.865751) (xy 152.18967 39.550971) (xy 151.703489 39.226115) (xy 151.13 39.112041) (xy 150.556511 39.226115)
+ (xy 150.07033 39.550971) (xy 149.854336 39.874228) (xy 149.796821 39.75151) (xy 149.364947 39.357312) (xy 148.949026 39.185042)
+ (xy 148.717 39.306183) (xy 148.717 40.513) (xy 148.737 40.513) (xy 148.737 40.767) (xy 148.717 40.767)
+ (xy 148.717 40.787) (xy 148.463 40.787) (xy 148.463 40.767) (xy 148.443 40.767) (xy 148.443 40.513)
+ (xy 148.463 40.513) (xy 148.463 39.306183) (xy 148.230974 39.185042) (xy 147.815053 39.357312) (xy 147.383179 39.75151)
+ (xy 147.325663 39.874228) (xy 147.10967 39.550971) (xy 146.623489 39.226115) (xy 146.05 39.112041) (xy 145.476511 39.226115)
+ (xy 144.99033 39.550971) (xy 144.78 39.865751) (xy 144.56967 39.550971) (xy 144.083489 39.226115) (xy 143.51 39.112041)
+ (xy 142.936511 39.226115) (xy 142.45033 39.550971) (xy 142.24 39.865751) (xy 142.02967 39.550971) (xy 141.543489 39.226115)
+ (xy 140.97 39.112041) (xy 140.396511 39.226115) (xy 140.0781 39.438869) (xy 136.886215 36.246985) (xy 136.793448 36.185)
+ (xy 164.815 36.185) (xy 164.815 57.815)
+ )
+ )
+ )
+)
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.pro b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.pro
new file mode 100644
index 0000000..525f3a9
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.pro
@@ -0,0 +1,63 @@
+update=Wed 17 Jun 2015 07:02:16 PM PDT
+version=1
+last_client=kicad
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=passive3-rpi-hub75-adapter.net
+UseCmpFile=0
+PadDrill=3.048
+PadDrillOvalY=3.048
+PadSizeH=4.064
+PadSizeV=4.064
+PcbTextSizeV=1.5
+PcbTextSizeH=1.5
+PcbTextThickness=0.3
+ModuleTextSizeV=1
+ModuleTextSizeH=1
+ModuleTextSizeThickness=0.15
+SolderMaskClearance=0
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.2
+BoardOutlineThickness=0.09999999999999999
+ModuleOutlineThickness=0.15
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=power
+LibName2=device
+LibName3=transistors
+LibName4=conn
+LibName5=linear
+LibName6=regul
+LibName7=74xx
+LibName8=cmos4000
+LibName9=adc-dac
+LibName10=memory
+LibName11=xilinx
+LibName12=microcontrollers
+LibName13=dsp
+LibName14=microchip
+LibName15=analog_switches
+LibName16=motorola
+LibName17=texas
+LibName18=intel
+LibName19=audio
+LibName20=interface
+LibName21=digital-audio
+LibName22=philips
+LibName23=display
+LibName24=cypress
+LibName25=siliconi
+LibName26=opto
+LibName27=atmel
+LibName28=contrib
+LibName29=valves
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.sch b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.sch
new file mode 100644
index 0000000..049bc29
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-3/passive3-rpi-hub75-adapter.sch
@@ -0,0 +1,408 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:cmos4000
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:microcontrollers
+LIBS:dsp
+LIBS:microchip
+LIBS:analog_switches
+LIBS:motorola
+LIBS:texas
+LIBS:intel
+LIBS:audio
+LIBS:interface
+LIBS:digital-audio
+LIBS:philips
+LIBS:display
+LIBS:cypress
+LIBS:siliconi
+LIBS:opto
+LIBS:atmel
+LIBS:contrib
+LIBS:valves
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date ""
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L CONN_02X08 Panel-1
+U 1 1 54ECB236
+P 6950 2550
+F 0 "Panel-1" H 6950 3000 50 0000 C CNN
+F 1 "CONN_02X08" V 6950 2550 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x08" H 6950 1350 60 0001 C CNN
+F 3 "" H 6950 1350 60 0000 C CNN
+ 1 6950 2550
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_02X20 P1
+U 1 1 54ECB2B7
+P 4500 3700
+F 0 "P1" H 4500 4750 50 0000 C CNN
+F 1 "CONN_02X20" V 4500 3700 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x20" H 4500 2750 60 0001 C CNN
+F 3 "" H 4500 2750 60 0000 C CNN
+ 1 4500 3700
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 4800 2700 4800 2850
+Wire Wire Line
+ 4750 2750 4950 2750
+Wire Wire Line
+ 4800 2850 4750 2850
+Connection ~ 4800 2750
+$Comp
+L GND #PWR01
+U 1 1 54ECB3E1
+P 4850 3350
+F 0 "#PWR01" H 4850 3350 30 0001 C CNN
+F 1 "GND" H 4850 3280 30 0001 C CNN
+F 2 "" H 4850 3350 60 0000 C CNN
+F 3 "" H 4850 3350 60 0000 C CNN
+ 1 4850 3350
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 4750 3350 4850 3350
+$Comp
+L GND #PWR02
+U 1 1 54ECB417
+P 4850 3650
+F 0 "#PWR02" H 4850 3650 30 0001 C CNN
+F 1 "GND" H 4850 3580 30 0001 C CNN
+F 2 "" H 4850 3650 60 0000 C CNN
+F 3 "" H 4850 3650 60 0000 C CNN
+ 1 4850 3650
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 4750 3650 4850 3650
+$Comp
+L GND #PWR03
+U 1 1 54ECB4A1
+P 4850 2950
+F 0 "#PWR03" H 4850 2950 30 0001 C CNN
+F 1 "GND" H 4850 2880 30 0001 C CNN
+F 2 "" H 4850 2950 60 0000 C CNN
+F 3 "" H 4850 2950 60 0000 C CNN
+ 1 4850 2950
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 4750 2950 4850 2950
+$Comp
+L GND #PWR04
+U 1 1 54ECB5FE
+P 4150 4650
+F 0 "#PWR04" H 4150 4650 30 0001 C CNN
+F 1 "GND" H 4150 4580 30 0001 C CNN
+F 2 "" H 4150 4650 60 0000 C CNN
+F 3 "" H 4150 4650 60 0000 C CNN
+ 1 4150 4650
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 4150 4650 4250 4650
+$Comp
+L GND #PWR05
+U 1 1 54ECB73E
+P 4850 4350
+F 0 "#PWR05" H 4850 4350 30 0001 C CNN
+F 1 "GND" H 4850 4280 30 0001 C CNN
+F 2 "" H 4850 4350 60 0000 C CNN
+F 3 "" H 4850 4350 60 0000 C CNN
+ 1 4850 4350
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 4750 4350 4850 4350
+$Comp
+L GND #PWR06
+U 1 1 54ECB7BC
+P 4150 3950
+F 0 "#PWR06" H 4150 3950 30 0001 C CNN
+F 1 "GND" H 4150 3880 30 0001 C CNN
+F 2 "" H 4150 3950 60 0000 C CNN
+F 3 "" H 4150 3950 60 0000 C CNN
+ 1 4150 3950
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 4150 3950 4250 3950
+Text GLabel 4250 3050 0 51 Output ~ 0
+strobe
+Text GLabel 4750 4250 2 51 Output ~ 0
+p1_r1
+Text GLabel 4250 4150 0 51 Output ~ 0
+p1_g1
+Text GLabel 4250 4250 0 51 Output ~ 0
+p1_b1
+Text GLabel 4250 4450 0 51 Output ~ 0
+p1_r2
+Text GLabel 4250 4350 0 51 Output ~ 0
+p1_g2
+Text GLabel 4750 4550 2 51 Output ~ 0
+p1_b2
+Text GLabel 4250 3450 0 51 Output ~ 0
+row_A
+Text GLabel 4750 3450 2 51 Output ~ 0
+row_B
+Text GLabel 4750 3550 2 51 Output ~ 0
+row_C
+Text GLabel 4750 3750 2 51 Output ~ 0
+row_D
+Text GLabel 4250 3250 0 51 Output ~ 0
+clock
+Text GLabel 4250 3850 0 51 Output ~ 0
+p0_r1
+Text GLabel 4250 3350 0 51 Output ~ 0
+p0_g1
+Text GLabel 4750 3950 2 51 Output ~ 0
+p0_b1
+Text GLabel 4750 3850 2 51 Output ~ 0
+p0_r2
+Text GLabel 4250 3750 0 51 Output ~ 0
+p0_g2
+Text GLabel 4250 3650 0 51 Output ~ 0
+p0_b2
+Text GLabel 4750 3250 2 51 Output ~ 0
+OE
+Wire Wire Line
+ 7200 2500 7750 2500
+$Comp
+L GND #PWR07
+U 1 1 54ECD031
+P 7750 2950
+F 0 "#PWR07" H 7750 2950 30 0001 C CNN
+F 1 "GND" H 7750 2880 30 0001 C CNN
+F 2 "" H 7750 2950 60 0000 C CNN
+F 3 "" H 7750 2950 60 0000 C CNN
+ 1 7750 2950
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 7200 2900 7750 2900
+Wire Wire Line
+ 7200 2300 7750 2300
+$Comp
+L CONN_02X08 Panel-2
+U 1 1 54ECE201
+P 6950 3800
+F 0 "Panel-2" H 6950 4250 50 0000 C CNN
+F 1 "CONN_02X08" V 6950 3800 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x08" H 6950 2600 60 0001 C CNN
+F 3 "" H 6950 2600 60 0000 C CNN
+ 1 6950 3800
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 7200 3750 7750 3750
+$Comp
+L GND #PWR08
+U 1 1 54ECE20E
+P 7750 4200
+F 0 "#PWR08" H 7750 4200 30 0001 C CNN
+F 1 "GND" H 7750 4130 30 0001 C CNN
+F 2 "" H 7750 4200 60 0000 C CNN
+F 3 "" H 7750 4200 60 0000 C CNN
+ 1 7750 4200
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 7200 4150 7750 4150
+Wire Wire Line
+ 7200 3550 7750 3550
+$Comp
+L VCC #PWR09
+U 1 1 54ECD3DE
+P 4800 2700
+F 0 "#PWR09" H 4800 2800 30 0001 C CNN
+F 1 "VCC" H 4800 2800 30 0000 C CNN
+F 2 "" H 4800 2700 60 0000 C CNN
+F 3 "" H 4800 2700 60 0000 C CNN
+ 1 4800 2700
+ 1 0 0 -1
+$EndComp
+Text GLabel 7200 3650 2 51 Input ~ 0
+p1_g2
+Wire Wire Line
+ 7750 3550 7750 4200
+Connection ~ 7750 4150
+Connection ~ 7750 3750
+Text GLabel 7200 3450 2 51 Input ~ 0
+p1_g1
+Wire Wire Line
+ 7750 2300 7750 2950
+Connection ~ 7750 2500
+Connection ~ 7750 2900
+Text GLabel 7200 2400 2 51 Input ~ 0
+p0_g2
+Text GLabel 7200 2200 2 51 Input ~ 0
+p0_g1
+Text GLabel 7200 2700 2 51 Input ~ 0
+row_D
+Text GLabel 7200 2600 2 51 Input ~ 0
+row_B
+Text GLabel 7200 3850 2 51 Input ~ 0
+row_B
+Text GLabel 7200 3950 2 51 Input ~ 0
+row_D
+Text GLabel 6700 2200 0 51 Input ~ 0
+p0_r1
+Text GLabel 6700 2800 0 51 Input ~ 0
+clock
+Text GLabel 6700 2500 0 51 Input ~ 0
+p0_b2
+Text GLabel 6700 2300 0 51 Input ~ 0
+p0_b1
+Text GLabel 6700 2400 0 51 Input ~ 0
+p0_r2
+Text GLabel 6700 2900 0 51 Input ~ 0
+OE
+Text GLabel 6700 3450 0 51 Input ~ 0
+p1_r1
+Text GLabel 6700 3550 0 51 Input ~ 0
+p1_b1
+Text GLabel 6700 3650 0 51 Input ~ 0
+p1_r2
+Text GLabel 6700 3750 0 51 Input ~ 0
+p1_b2
+Text GLabel 6700 4050 0 51 Input ~ 0
+clock
+Text GLabel 6700 4150 0 51 Input ~ 0
+OE
+Text GLabel 4750 3050 2 51 Output ~ 0
+p2_r1
+Text GLabel 4250 2850 0 51 Output ~ 0
+p2_g1
+Text GLabel 4250 2950 0 51 Output ~ 0
+p2_b1
+Text GLabel 4250 4550 0 51 Output ~ 0
+p2_r2
+Text GLabel 4750 4450 2 51 Output ~ 0
+p2_g2
+Text GLabel 4750 4650 2 51 Output ~ 0
+p2_b2
+Text GLabel 6700 3850 0 51 Input ~ 0
+row_A
+Text GLabel 6700 3950 0 51 Input ~ 0
+row_C
+Text GLabel 6700 2600 0 51 Input ~ 0
+row_A
+Text GLabel 6700 2700 0 51 Input ~ 0
+row_C
+Text GLabel 7200 4050 2 51 Input ~ 0
+strobe
+Text GLabel 7200 2800 2 51 Input ~ 0
+strobe
+$Comp
+L CONN_02X08 Panel-3
+U 1 1 54F3E6D5
+P 6950 5250
+F 0 "Panel-3" H 6950 5700 50 0000 C CNN
+F 1 "CONN_02X08" V 6950 5250 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x08" H 6950 4050 60 0001 C CNN
+F 3 "" H 6950 4050 60 0000 C CNN
+ 1 6950 5250
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 7200 5200 7750 5200
+$Comp
+L GND #PWR010
+U 1 1 54F3E6DC
+P 7750 5650
+F 0 "#PWR010" H 7750 5650 30 0001 C CNN
+F 1 "GND" H 7750 5580 30 0001 C CNN
+F 2 "" H 7750 5650 60 0000 C CNN
+F 3 "" H 7750 5650 60 0000 C CNN
+ 1 7750 5650
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 7200 5600 7750 5600
+Wire Wire Line
+ 7200 5000 7750 5000
+Text GLabel 7200 5100 2 51 Input ~ 0
+p2_g2
+Wire Wire Line
+ 7750 5000 7750 5650
+Connection ~ 7750 5600
+Connection ~ 7750 5200
+Text GLabel 7200 4900 2 51 Input ~ 0
+p2_g1
+Text GLabel 7200 5300 2 51 Input ~ 0
+row_B
+Text GLabel 7200 5400 2 51 Input ~ 0
+row_D
+Text GLabel 6700 4900 0 51 Input ~ 0
+p2_r1
+Text GLabel 6700 5000 0 51 Input ~ 0
+p2_b1
+Text GLabel 6700 5100 0 51 Input ~ 0
+p2_r2
+Text GLabel 6700 5200 0 51 Input ~ 0
+p2_b2
+Text GLabel 6700 5500 0 51 Input ~ 0
+clock
+Text GLabel 6700 5600 0 51 Input ~ 0
+OE
+Text GLabel 6700 5300 0 51 Input ~ 0
+row_A
+Text GLabel 6700 5400 0 51 Input ~ 0
+row_C
+Text GLabel 7200 5500 2 51 Input ~ 0
+strobe
+NoConn ~ 4250 2750
+NoConn ~ 4250 3150
+NoConn ~ 4250 3550
+NoConn ~ 4250 4050
+NoConn ~ 4750 4050
+NoConn ~ 4750 4150
+NoConn ~ 4750 3150
+$Comp
+L PWR_FLAG #FLG011
+U 1 1 557B29FD
+P 4950 2750
+F 0 "#FLG011" H 4950 2845 50 0001 C CNN
+F 1 "PWR_FLAG" H 4950 2930 50 0000 C CNN
+F 2 "" H 4950 2750 60 0000 C CNN
+F 3 "" H 4950 2750 60 0000 C CNN
+ 1 4950 2750
+ 1 0 0 -1
+$EndComp
+$Comp
+L PWR_FLAG #FLG012
+U 1 1 557B2BFC
+P 4200 4700
+F 0 "#FLG012" H 4200 4795 50 0001 C CNN
+F 1 "PWR_FLAG" H 4200 4880 50 0000 C CNN
+F 2 "" H 4200 4700 60 0000 C CNN
+F 3 "" H 4200 4700 60 0000 C CNN
+ 1 4200 4700
+ -1 0 0 1
+$EndComp
+Wire Wire Line
+ 4200 4650 4200 4700
+Connection ~ 4200 4650
+$EndSCHEMATC
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/Makefile
new file mode 100644
index 0000000..eb4ab9e
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/Makefile
@@ -0,0 +1,3 @@
+include ../kicad-scripts/makefile.inc
+
+passive-rpi-hub75-adapter-fab.zip:
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/README.md
new file mode 100644
index 0000000..280c504
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/README.md
@@ -0,0 +1,17 @@
+Adapter PCB to connect to Rasbperry Pi1
+=======================================
+
+ * Passive board. Simple, but might need to define `--led-slowdown-gpio` if you see
+ glitches.
+ * Supports one panel connected to a 26 pin Raspberry Pi 1. If you have a newer RPi,
+ check out the [Passive 3](../passive-3) or [Active 3](../active-3) adapter.
+ * Open source KiCAD PCB EDA format.
+ * (not very pretty layout, was just lazy and let the auto-router do it).
+ * The FAB files are provided as [passive-rpi-hub75-adapter-fab.zip](./passive-rpi-hub75-adapter-fab.zip)
+
+This board is [shared on OSH Park][osh-passive-rpi] (not affiliated)
+
+![Preview][rendering]
+
+[rendering]: ../../img/passive-rpi1-pcb.png
+[osh-passive-rpi]: https://oshpark.com/shared_projects/afEA1gNt
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter-cache.lib b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter-cache.lib
new file mode 100644
index 0000000..6cce9fc
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter-cache.lib
@@ -0,0 +1,150 @@
+EESchema-LIBRARY Version 2.3
+#encoding utf-8
+#
+# CONN_02X08
+#
+DEF CONN_02X08 P 0 1 Y N 1 F N
+F0 "P" 0 450 50 H V C CNN
+F1 "CONN_02X08" 0 0 50 V V C CNN
+F2 "" 0 -1200 60 H V C CNN
+F3 "" 0 -1200 60 H V C CNN
+$FPLIST
+ Pin_Header_Straight_2X08
+ Pin_Header_Angled_2X08
+ Socket_Strip_Straight_2X08
+ Socket_Strip_Angled_2X08
+$ENDFPLIST
+DRAW
+S -100 -345 -50 -355 0 1 0 N
+S -100 -245 -50 -255 0 1 0 N
+S -100 -145 -50 -155 0 1 0 N
+S -100 -45 -50 -55 0 1 0 N
+S -100 55 -50 45 0 1 0 N
+S -100 155 -50 145 0 1 0 N
+S -100 255 -50 245 0 1 0 N
+S -100 355 -50 345 0 1 0 N
+S -100 400 100 -400 0 1 0 N
+S 50 -345 100 -355 0 1 0 N
+S 50 -245 100 -255 0 1 0 N
+S 50 -145 100 -155 0 1 0 N
+S 50 -45 100 -55 0 1 0 N
+S 50 55 100 45 0 1 0 N
+S 50 155 100 145 0 1 0 N
+S 50 255 100 245 0 1 0 N
+S 50 355 100 345 0 1 0 N
+X P1 1 -250 350 150 R 50 50 1 1 P
+X P2 2 250 350 150 L 50 50 1 1 P
+X P3 3 -250 250 150 R 50 50 1 1 P
+X P4 4 250 250 150 L 50 50 1 1 P
+X P5 5 -250 150 150 R 50 50 1 1 P
+X P6 6 250 150 150 L 50 50 1 1 P
+X P7 7 -250 50 150 R 50 50 1 1 P
+X P8 8 250 50 150 L 50 50 1 1 P
+X P9 9 -250 -50 150 R 50 50 1 1 P
+X P10 10 250 -50 150 L 50 50 1 1 P
+X P11 11 -250 -150 150 R 50 50 1 1 P
+X P12 12 250 -150 150 L 50 50 1 1 P
+X P13 13 -250 -250 150 R 50 50 1 1 P
+X P14 14 250 -250 150 L 50 50 1 1 P
+X P15 15 -250 -350 150 R 50 50 1 1 P
+X P16 16 250 -350 150 L 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_02X13
+#
+DEF CONN_02X13 P 0 1 Y N 1 F N
+F0 "P" 0 700 50 H V C CNN
+F1 "CONN_02X13" 0 0 50 V V C CNN
+F2 "" 0 -1150 60 H V C CNN
+F3 "" 0 -1150 60 H V C CNN
+$FPLIST
+ Pin_Header_Straight_2X13
+ Pin_Header_Angled_2X13
+ Socket_Strip_Straight_2X13
+ Socket_Strip_Angled_2X13
+$ENDFPLIST
+DRAW
+S -100 -595 -50 -605 0 1 0 N
+S -100 -495 -50 -505 0 1 0 N
+S -100 -395 -50 -405 0 1 0 N
+S -100 -295 -50 -305 0 1 0 N
+S -100 -195 -50 -205 0 1 0 N
+S -100 -95 -50 -105 0 1 0 N
+S -100 5 -50 -5 0 1 0 N
+S -100 105 -50 95 0 1 0 N
+S -100 205 -50 195 0 1 0 N
+S -100 305 -50 295 0 1 0 N
+S -100 405 -50 395 0 1 0 N
+S -100 505 -50 495 0 1 0 N
+S -100 605 -50 595 0 1 0 N
+S -100 650 100 -650 0 1 0 N
+S 50 -595 100 -605 0 1 0 N
+S 50 -495 100 -505 0 1 0 N
+S 50 -395 100 -405 0 1 0 N
+S 50 -295 100 -305 0 1 0 N
+S 50 -195 100 -205 0 1 0 N
+S 50 -95 100 -105 0 1 0 N
+S 50 5 100 -5 0 1 0 N
+S 50 105 100 95 0 1 0 N
+S 50 205 100 195 0 1 0 N
+S 50 305 100 295 0 1 0 N
+S 50 405 100 395 0 1 0 N
+S 50 505 100 495 0 1 0 N
+S 50 605 100 595 0 1 0 N
+X P1 1 -250 600 150 R 50 50 1 1 P
+X P2 2 250 600 150 L 50 50 1 1 P
+X P3 3 -250 500 150 R 50 50 1 1 P
+X P4 4 250 500 150 L 50 50 1 1 P
+X P5 5 -250 400 150 R 50 50 1 1 P
+X P6 6 250 400 150 L 50 50 1 1 P
+X P7 7 -250 300 150 R 50 50 1 1 P
+X P8 8 250 300 150 L 50 50 1 1 P
+X P9 9 -250 200 150 R 50 50 1 1 P
+X P10 10 250 200 150 L 50 50 1 1 P
+X P20 20 250 -300 150 L 50 50 1 1 P
+X P11 11 -250 100 150 R 50 50 1 1 P
+X P21 21 -250 -400 150 R 50 50 1 1 P
+X P12 12 250 100 150 L 50 50 1 1 P
+X P22 22 250 -400 150 L 50 50 1 1 P
+X P13 13 -250 0 150 R 50 50 1 1 P
+X P23 23 -250 -500 150 R 50 50 1 1 P
+X P14 14 250 0 150 L 50 50 1 1 P
+X P24 24 250 -500 150 L 50 50 1 1 P
+X P15 15 -250 -100 150 R 50 50 1 1 P
+X P25 25 -250 -600 150 R 50 50 1 1 P
+X P16 16 250 -100 150 L 50 50 1 1 P
+X P26 26 250 -600 150 L 50 50 1 1 P
+X P17 17 -250 -200 150 R 50 50 1 1 P
+X P18 18 250 -200 150 L 50 50 1 1 P
+X P19 19 -250 -300 150 R 50 50 1 1 P
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 -250 50 H I C CNN
+F1 "GND" 0 -150 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
+X GND 1 0 0 0 D 50 50 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# PWR_FLAG
+#
+DEF PWR_FLAG #FLG 0 0 N N 1 F P
+F0 "#FLG" 0 95 50 H I C CNN
+F1 "PWR_FLAG" 0 180 50 H V C CNN
+F2 "" 0 0 60 H V C CNN
+F3 "" 0 0 60 H V C CNN
+DRAW
+X pwr 1 0 0 0 U 20 20 0 0 w
+P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter-fab.zip b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter-fab.zip
new file mode 100644
index 0000000..b770f23
Binary files /dev/null and b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter-fab.zip differ
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.kicad_pcb b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.kicad_pcb
new file mode 100644
index 0000000..ca5bce0
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.kicad_pcb
@@ -0,0 +1,591 @@
+(kicad_pcb (version 4) (host pcbnew "(2015-10-16 BZR 6271, Git e177d75)-product")
+
+ (general
+ (links 19)
+ (no_connects 0)
+ (area 83.657 38.37 122.550001 58.502333)
+ (thickness 1.6)
+ (drawings 9)
+ (tracks 128)
+ (zones 0)
+ (modules 2)
+ (nets 15)
+ )
+
+ (page A4)
+ (layers
+ (0 F.Cu signal)
+ (31 B.Cu signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ (46 B.CrtYd user)
+ (47 F.CrtYd user)
+ (48 B.Fab user)
+ (49 F.Fab user)
+ )
+
+ (setup
+ (last_trace_width 0.254)
+ (trace_clearance 0.254)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.254)
+ (segment_width 0.2)
+ (edge_width 0.1)
+ (via_size 0.889)
+ (via_drill 0.635)
+ (via_min_size 0.889)
+ (via_min_drill 0.508)
+ (uvia_size 0.508)
+ (uvia_drill 0.127)
+ (uvias_allowed no)
+ (uvia_min_size 0.508)
+ (uvia_min_drill 0.127)
+ (pcb_text_width 0.3)
+ (pcb_text_size 1.5 1.5)
+ (mod_edge_width 0.15)
+ (mod_text_size 1 1)
+ (mod_text_width 0.15)
+ (pad_size 4.064 4.064)
+ (pad_drill 3.048)
+ (pad_to_mask_clearance 0)
+ (aux_axis_origin 0 0)
+ (visible_elements FFFFEF7F)
+ (pcbplotparams
+ (layerselection 0x010f0_80000001)
+ (usegerberextensions true)
+ (excludeedgelayer true)
+ (linewidth 0.100000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15)
+ (hpglpenoverlay 2)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory fab/))
+ )
+
+ (net 0 "")
+ (net 1 GND)
+ (net 2 strobe)
+ (net 3 p0_r1)
+ (net 4 p0_g1)
+ (net 5 OE)
+ (net 6 p0_b1)
+ (net 7 p0_r2)
+ (net 8 p0_g2)
+ (net 9 row_D)
+ (net 10 row_C)
+ (net 11 p0_b2)
+ (net 12 clock)
+ (net 13 row_B)
+ (net 14 row_A)
+
+ (net_class Default "This is the default net class."
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net OE)
+ (add_net clock)
+ (add_net p0_b1)
+ (add_net p0_b2)
+ (add_net p0_g1)
+ (add_net p0_g2)
+ (add_net p0_r1)
+ (add_net p0_r2)
+ (add_net row_A)
+ (add_net row_B)
+ (add_net row_C)
+ (add_net row_D)
+ (add_net strobe)
+ )
+
+ (net_class power ""
+ (clearance 0.254)
+ (trace_width 0.254)
+ (via_dia 0.889)
+ (via_drill 0.635)
+ (uvia_dia 0.508)
+ (uvia_drill 0.127)
+ (add_net GND)
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x08 (layer F.Cu) (tedit 557E1BCB) (tstamp 54F3AB27)
+ (at 95.25 53.34 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /54ECB236)
+ (fp_text reference Panel-1 (at 1.27 -2.54 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value CONN_02X08 (at 0 -3.1 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 19.55) (end 4.3 19.55) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 19.05) (end 3.81 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 19.05) (end -1.27 19.05) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 p0_r1))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 p0_g1))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 p0_b1))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 p0_r2))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 p0_g2))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 11 p0_b2))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 row_A))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 13 row_B))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 row_C))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 row_D))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 clock))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 strobe))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 OE))
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (model Pin_Headers.3dshapes/Pin_Header_Straight_2x08.wrl
+ (at (xyz 0.05 -0.35 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 90))
+ )
+ )
+
+ (module Pin_Headers:Pin_Header_Straight_2x13 (layer F.Cu) (tedit 557E1BBF) (tstamp 557E12E7)
+ (at 88.9 43.815 90)
+ (descr "Through hole pin header")
+ (tags "pin header")
+ (path /54ECB2B7)
+ (fp_text reference P1 (at -2.413 -0.508 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value RPi-Header (at -0.381 -4.064 90) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start -1.75 -1.75) (end -1.75 32.25) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.3 -1.75) (end 4.3 32.25) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 -1.75) (end 4.3 -1.75) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.75 32.25) (end 4.3 32.25) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.81 -1.27) (end 3.81 31.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.27 1.27) (end -1.27 31.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 31.75) (end -1.27 31.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start 3.81 -1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 0 -1.55) (end -1.55 -1.55) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 -1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.55 -1.55) (end -1.55 0) (layer F.SilkS) (width 0.15))
+ (pad 1 thru_hole rect (at 0 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 2 thru_hole oval (at 2.54 0 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 4 thru_hole oval (at 2.54 2.54 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 6 thru_hole oval (at 2.54 5.08 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 2 strobe))
+ (pad 8 thru_hole oval (at 2.54 7.62 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 10 thru_hole oval (at 2.54 10.16 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 12 clock))
+ (pad 12 thru_hole oval (at 2.54 12.7 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 5 OE))
+ (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 4 p0_g1))
+ (pad 14 thru_hole oval (at 2.54 15.24 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 14 row_A))
+ (pad 16 thru_hole oval (at 2.54 17.78 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 13 row_B))
+ (pad 17 thru_hole oval (at 0 20.32 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
+ (pad 18 thru_hole oval (at 2.54 20.32 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 10 row_C))
+ (pad 19 thru_hole oval (at 0 22.86 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 11 p0_b2))
+ (pad 20 thru_hole oval (at 2.54 22.86 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 21 thru_hole oval (at 0 25.4 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 8 p0_g2))
+ (pad 22 thru_hole oval (at 2.54 25.4 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 9 row_D))
+ (pad 23 thru_hole oval (at 0 27.94 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 3 p0_r1))
+ (pad 24 thru_hole oval (at 2.54 27.94 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 7 p0_r2))
+ (pad 25 thru_hole oval (at 0 30.48 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 1 GND))
+ (pad 26 thru_hole oval (at 2.54 30.48 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
+ (net 6 p0_b1))
+ )
+
+ (gr_text %%gitversion%% (at 118.872 47.244) (layer B.SilkS)
+ (effects (font (size 1.2 1.2) (thickness 0.2)) (justify left mirror))
+ )
+ (gr_text "↖RPi corner" (at 90.17 39.37) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (gr_text "↑video connector" (at 121.5 47.5 270) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.2)))
+ )
+ (gr_text github.com/hzeller/rpi-rgb-led-matrix (at 104 47.5) (layer F.SilkS)
+ (effects (font (size 1.1 1.1) (thickness 0.2)))
+ )
+ (gr_line (start 102.235 56.642) (end 106.045 56.642) (angle 90) (layer F.SilkS) (width 1.5))
+ (gr_line (start 85.5 57.5) (end 85.5 38.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556C01FD))
+ (gr_line (start 85.5 38.5) (end 122.5 38.5) (angle 90) (layer Edge.Cuts) (width 0.1))
+ (gr_line (start 122.5 38.5) (end 122.5 57.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556BCFD7))
+ (gr_line (start 122.5 57.5) (end 85.5 57.5) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 556BCFD8))
+
+ (segment (start 104.14 41.275) (end 105.3849 41.275) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 112.3295 41.275) (end 111.0595 42.545) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 111.0595 42.545) (end 106.1391 42.545) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 106.1391 42.545) (end 105.3849 41.7908) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 105.3849 41.7908) (end 105.3849 41.275) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 112.3295 41.275) (end 113.0049 41.275) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 111.76 41.275) (end 112.3295 41.275) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 118.6854 43.8997) (end 117.3307 42.545) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 117.3307 42.545) (end 113.7591 42.545) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 113.7591 42.545) (end 113.0049 41.7908) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 113.0049 41.7908) (end 113.0049 41.275) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 118.8105 43.815) (end 118.7258 43.8997) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 118.7258 43.8997) (end 118.6854 43.8997) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 113.03 49.5551) (end 118.6854 43.8997) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 113.03 50.8) (end 113.03 49.5551) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 119.38 43.815) (end 118.8105 43.815) (width 0.254) (layer F.Cu) (net 1))
+ (segment (start 97.79 43.2214) (end 97.79 49.5492) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 95.2249 41.275) (end 95.2249 41.7419) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 95.2249 41.7419) (end 96.0531 42.5701) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 96.0531 42.5701) (end 97.1387 42.5701) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 97.1387 42.5701) (end 97.79 43.2214) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 104.14 41.275) (end 102.895 42.52) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 102.895 42.52) (end 98.4914 42.52) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 98.4914 42.52) (end 97.79 43.2214) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 97.79 49.5492) (end 97.79 50.8) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 97.79 49.5492) (end 100.8698 49.5492) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 100.8698 49.5492) (end 101.6251 50.3045) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 101.6251 50.3045) (end 101.6251 50.8) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 102.87 50.8) (end 101.6251 50.8) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 93.98 41.275) (end 95.2249 41.275) (width 0.254) (layer B.Cu) (net 1))
+ (segment (start 110.49 50.8) (end 109.2451 50.8) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 96.52 43.815) (end 96.52 45.0599) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 96.52 45.0599) (end 93.9931 47.5868) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 93.9931 47.5868) (end 93.9931 54.4202) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 93.9931 54.4202) (end 94.1662 54.5933) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 94.1662 54.5933) (end 100.9179 54.5933) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 100.9179 54.5933) (end 101.6 53.9112) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 101.6 53.9112) (end 101.6 52.835) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 101.6 52.835) (end 102.365 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 102.365 52.07) (end 108.4909 52.07) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 108.4909 52.07) (end 109.2451 51.3158) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 109.2451 51.3158) (end 109.2451 50.8) (width 0.254) (layer F.Cu) (net 2))
+ (segment (start 95.25 53.34) (end 96.4949 53.34) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 116.84 43.815) (end 115.5951 43.815) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 115.5951 43.815) (end 115.5951 44.2818) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 115.5951 44.2818) (end 111.8058 48.0711) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 111.8058 48.0711) (end 103.7779 48.0711) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 103.7779 48.0711) (end 101.6 50.249) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 101.6 50.249) (end 101.6 51.295) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 101.6 51.295) (end 100.7999 52.0951) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 100.7999 52.0951) (end 97.2729 52.0951) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 97.2729 52.0951) (end 96.4949 52.8731) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 96.4949 52.8731) (end 96.4949 53.34) (width 0.254) (layer F.Cu) (net 3))
+ (segment (start 95.25 50.8) (end 96.4949 50.8) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 104.14 43.815) (end 102.8951 43.815) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 102.8951 43.815) (end 102.8951 44.2819) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 102.8951 44.2819) (end 102.1171 45.0599) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 102.1171 45.0599) (end 101.7192 45.0599) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 101.7192 45.0599) (end 96.4949 50.2842) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 96.4949 50.2842) (end 96.4949 50.8) (width 0.254) (layer F.Cu) (net 4))
+ (segment (start 113.03 53.34) (end 113.03 52.0951) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 101.6 41.275) (end 102.8449 41.275) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 102.8449 41.275) (end 102.8449 40.8082) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 102.8449 40.8082) (end 104.1729 39.4802) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 104.1729 39.4802) (end 114.3167 39.4802) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 114.3167 39.4802) (end 115.57 40.7335) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 115.57 40.7335) (end 115.57 50.0709) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 115.57 50.0709) (end 113.5458 52.0951) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 113.5458 52.0951) (end 113.03 52.0951) (width 0.254) (layer B.Cu) (net 5))
+ (segment (start 97.79 53.34) (end 99.0349 53.34) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 119.38 41.275) (end 119.38 42.5199) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 119.38 42.5199) (end 119.8468 42.5199) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 119.8468 42.5199) (end 120.6524 43.3255) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 120.6524 43.3255) (end 120.6524 48.1982) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 120.6524 48.1982) (end 112.6587 56.1919) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 112.6587 56.1919) (end 101.371 56.1919) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 101.371 56.1919) (end 99.0349 53.8558) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 99.0349 53.8558) (end 99.0349 53.34) (width 0.254) (layer B.Cu) (net 6))
+ (segment (start 100.33 53.34) (end 101.5749 53.34) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 116.84 41.275) (end 116.84 42.5199) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 116.84 42.5199) (end 117.3068 42.5199) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 117.3068 42.5199) (end 118.11 43.3231) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 118.11 43.3231) (end 118.11 50.0216) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 118.11 50.0216) (end 112.4481 55.6835) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 112.4481 55.6835) (end 103.4026 55.6835) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 103.4026 55.6835) (end 101.5749 53.8558) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 101.5749 53.8558) (end 101.5749 53.34) (width 0.254) (layer B.Cu) (net 7))
+ (segment (start 114.3 43.815) (end 113.0551 43.815) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 113.0551 43.815) (end 113.0551 44.2819) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 113.0551 44.2819) (end 112.2771 45.0599) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 112.2771 45.0599) (end 106.0701 45.0599) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 106.0701 45.0599) (end 100.33 50.8) (width 0.254) (layer F.Cu) (net 8))
+ (segment (start 114.3 41.275) (end 113.0551 41.275) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 113.0551 41.275) (end 113.0551 40.8082) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 113.0551 40.8082) (end 112.2605 40.0136) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 112.2605 40.0136) (end 108.7063 40.0136) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 108.7063 40.0136) (end 107.95 40.7699) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 107.95 40.7699) (end 107.95 50.8) (width 0.254) (layer B.Cu) (net 9))
+ (segment (start 107.95 53.34) (end 107.95 52.0951) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 109.22 41.275) (end 109.22 42.5199) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 109.22 42.5199) (end 109.6868 42.5199) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 109.6868 42.5199) (end 110.49 43.3231) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 110.49 43.3231) (end 110.49 47.1986) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 110.49 47.1986) (end 109.22 48.4686) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 109.22 48.4686) (end 109.22 51.3409) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 109.22 51.3409) (end 108.4658 52.0951) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 108.4658 52.0951) (end 107.95 52.0951) (width 0.254) (layer B.Cu) (net 10))
+ (segment (start 111.76 43.815) (end 111.76 53.8323) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 111.76 53.8323) (end 110.4228 55.1695) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 110.4228 55.1695) (end 104.6995 55.1695) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 104.6995 55.1695) (end 102.87 53.34) (width 0.254) (layer B.Cu) (net 11))
+ (segment (start 110.49 53.34) (end 109.2451 53.34) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 101.6 43.815) (end 101.6 45.0599) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 101.6 45.0599) (end 104.14 47.5999) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 104.14 47.5999) (end 104.14 53.8544) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 104.14 53.8544) (end 104.94 54.6544) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 104.94 54.6544) (end 108.4465 54.6544) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 108.4465 54.6544) (end 109.2451 53.8558) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 109.2451 53.8558) (end 109.2451 53.34) (width 0.254) (layer B.Cu) (net 12))
+ (segment (start 105.41 50.8) (end 105.41 49.5551) (width 0.254) (layer B.Cu) (net 13))
+ (segment (start 105.41 49.5551) (end 105.41 43.3231) (width 0.254) (layer B.Cu) (net 13))
+ (segment (start 105.41 43.3231) (end 106.2132 42.5199) (width 0.254) (layer B.Cu) (net 13))
+ (segment (start 106.2132 42.5199) (end 106.68 42.5199) (width 0.254) (layer B.Cu) (net 13))
+ (segment (start 106.68 41.275) (end 106.68 42.5199) (width 0.254) (layer B.Cu) (net 13))
+ (segment (start 105.41 53.34) (end 105.41 52.0951) (width 0.254) (layer B.Cu) (net 14))
+ (segment (start 106.68 43.815) (end 106.68 51.3409) (width 0.254) (layer B.Cu) (net 14))
+ (segment (start 106.68 51.3409) (end 105.9258 52.0951) (width 0.254) (layer B.Cu) (net 14))
+ (segment (start 105.9258 52.0951) (end 105.41 52.0951) (width 0.254) (layer B.Cu) (net 14))
+
+ (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 557E155F) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 122.5 57.5) (xy 85.5 57.5) (xy 85.5 38.5) (xy 122.5 38.5)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 121.815 56.815) (xy 86.185 56.815) (xy 86.185 39.747041) (xy 88.9 39.747041) (xy 88.326511 39.861115)
+ (xy 87.84033 40.185971) (xy 87.515474 40.672152) (xy 87.4014 41.245641) (xy 87.4014 41.304359) (xy 87.515474 41.877848)
+ (xy 87.827301 42.34453) (xy 87.794277 42.350937) (xy 87.581473 42.490727) (xy 87.439023 42.70176) (xy 87.38896 42.9514)
+ (xy 87.38896 44.6786) (xy 87.435937 44.920723) (xy 87.575727 45.133527) (xy 87.78676 45.275977) (xy 88.0364 45.32604)
+ (xy 89.7636 45.32604) (xy 90.005723 45.279063) (xy 90.218527 45.139273) (xy 90.360977 44.92824) (xy 90.369179 44.88734)
+ (xy 90.38033 44.904029) (xy 90.866511 45.228885) (xy 91.44 45.342959) (xy 92.013489 45.228885) (xy 92.49967 44.904029)
+ (xy 92.71 44.589248) (xy 92.92033 44.904029) (xy 93.406511 45.228885) (xy 93.98 45.342959) (xy 94.553489 45.228885)
+ (xy 95.03967 44.904029) (xy 95.25 44.589248) (xy 95.46033 44.904029) (xy 95.543001 44.959268) (xy 93.454285 47.047985)
+ (xy 93.289104 47.295195) (xy 93.2311 47.5868) (xy 93.2311 54.4202) (xy 93.289104 54.711805) (xy 93.404766 54.884905)
+ (xy 93.454285 54.959015) (xy 93.627384 55.132115) (xy 93.702342 55.1822) (xy 93.874595 55.297296) (xy 94.1662 55.3553)
+ (xy 100.9179 55.3553) (xy 101.209505 55.297296) (xy 101.456715 55.132115) (xy 102.019822 54.569008) (xy 102.296511 54.753885)
+ (xy 102.87 54.867959) (xy 103.443489 54.753885) (xy 103.92967 54.429029) (xy 104.14 54.114248) (xy 104.35033 54.429029)
+ (xy 104.836511 54.753885) (xy 105.41 54.867959) (xy 105.983489 54.753885) (xy 106.46967 54.429029) (xy 106.68 54.114248)
+ (xy 106.89033 54.429029) (xy 107.376511 54.753885) (xy 107.95 54.867959) (xy 108.523489 54.753885) (xy 109.00967 54.429029)
+ (xy 109.22 54.114248) (xy 109.43033 54.429029) (xy 109.916511 54.753885) (xy 110.49 54.867959) (xy 111.063489 54.753885)
+ (xy 111.54967 54.429029) (xy 111.76 54.114248) (xy 111.97033 54.429029) (xy 112.456511 54.753885) (xy 113.03 54.867959)
+ (xy 113.603489 54.753885) (xy 114.08967 54.429029) (xy 114.414526 53.942848) (xy 114.5286 53.369359) (xy 114.5286 53.310641)
+ (xy 114.414526 52.737152) (xy 114.08967 52.250971) (xy 113.818839 52.070008) (xy 114.236821 51.68849) (xy 114.484968 51.159027)
+ (xy 114.364469 50.927) (xy 113.157 50.927) (xy 113.157 50.947) (xy 112.903 50.947) (xy 112.903 50.927)
+ (xy 112.883 50.927) (xy 112.883 50.673) (xy 112.903 50.673) (xy 112.903 49.466183) (xy 112.670974 49.345042)
+ (xy 113.389026 49.345042) (xy 113.157 49.466183) (xy 113.157 50.673) (xy 114.364469 50.673) (xy 114.484968 50.440973)
+ (xy 114.236821 49.91151) (xy 113.804947 49.517312) (xy 113.389026 49.345042) (xy 112.670974 49.345042) (xy 112.255053 49.517312)
+ (xy 111.823179 49.91151) (xy 111.765664 50.034228) (xy 111.54967 49.710971) (xy 111.063489 49.386115) (xy 110.49 49.272041)
+ (xy 109.916511 49.386115) (xy 109.43033 49.710971) (xy 109.22 50.025752) (xy 109.00967 49.710971) (xy 108.523489 49.386115)
+ (xy 107.95 49.272041) (xy 107.376511 49.386115) (xy 106.89033 49.710971) (xy 106.68 50.025752) (xy 106.46967 49.710971)
+ (xy 105.983489 49.386115) (xy 105.41 49.272041) (xy 104.836511 49.386115) (xy 104.35033 49.710971) (xy 104.134336 50.034228)
+ (xy 104.076821 49.91151) (xy 103.644947 49.517312) (xy 103.47833 49.448301) (xy 104.093531 48.8331) (xy 111.8058 48.8331)
+ (xy 112.097405 48.775096) (xy 112.344615 48.609915) (xy 115.942286 45.012245) (xy 116.266511 45.228885) (xy 116.84 45.342959)
+ (xy 117.413489 45.228885) (xy 117.89967 44.904029) (xy 118.115664 44.580772) (xy 118.173179 44.70349) (xy 118.605053 45.097688)
+ (xy 119.020974 45.269958) (xy 119.253 45.148817) (xy 119.253 43.942) (xy 119.507 43.942) (xy 119.507 45.148817)
+ (xy 119.739026 45.269958) (xy 120.154947 45.097688) (xy 120.586821 44.70349) (xy 120.834968 44.174027) (xy 120.714469 43.942)
+ (xy 119.507 43.942) (xy 119.253 43.942) (xy 119.233 43.942) (xy 119.233 43.688) (xy 119.253 43.688)
+ (xy 119.253 43.668) (xy 119.507 43.668) (xy 119.507 43.688) (xy 120.714469 43.688) (xy 120.834968 43.455973)
+ (xy 120.586821 42.92651) (xy 120.168839 42.544992) (xy 120.43967 42.364029) (xy 120.764526 41.877848) (xy 120.8786 41.304359)
+ (xy 120.8786 41.245641) (xy 120.764526 40.672152) (xy 120.43967 40.185971) (xy 119.953489 39.861115) (xy 119.38 39.747041)
+ (xy 118.806511 39.861115) (xy 118.32033 40.185971) (xy 118.11 40.500752) (xy 117.89967 40.185971) (xy 117.413489 39.861115)
+ (xy 116.84 39.747041) (xy 116.266511 39.861115) (xy 115.78033 40.185971) (xy 115.57 40.500752) (xy 115.35967 40.185971)
+ (xy 114.873489 39.861115) (xy 114.3 39.747041) (xy 113.726511 39.861115) (xy 113.24033 40.185971) (xy 113.024336 40.509228)
+ (xy 112.966821 40.38651) (xy 112.534947 39.992312) (xy 112.119026 39.820042) (xy 111.887 39.941183) (xy 111.887 41.148)
+ (xy 111.907 41.148) (xy 111.907 41.402) (xy 111.887 41.402) (xy 111.887 41.422) (xy 111.633 41.422)
+ (xy 111.633 41.402) (xy 111.613 41.402) (xy 111.613 41.148) (xy 111.633 41.148) (xy 111.633 39.941183)
+ (xy 111.400974 39.820042) (xy 110.985053 39.992312) (xy 110.553179 40.38651) (xy 110.495664 40.509228) (xy 110.27967 40.185971)
+ (xy 109.793489 39.861115) (xy 109.22 39.747041) (xy 108.646511 39.861115) (xy 108.16033 40.185971) (xy 107.95 40.500752)
+ (xy 107.73967 40.185971) (xy 107.253489 39.861115) (xy 106.68 39.747041) (xy 106.106511 39.861115) (xy 105.62033 40.185971)
+ (xy 105.404336 40.509228) (xy 105.346821 40.38651) (xy 104.914947 39.992312) (xy 104.499026 39.820042) (xy 104.267 39.941183)
+ (xy 104.267 41.148) (xy 104.287 41.148) (xy 104.287 41.402) (xy 104.267 41.402) (xy 104.267 41.422)
+ (xy 104.013 41.422) (xy 104.013 41.402) (xy 103.993 41.402) (xy 103.993 41.148) (xy 104.013 41.148)
+ (xy 104.013 39.941183) (xy 103.780974 39.820042) (xy 103.365053 39.992312) (xy 102.933179 40.38651) (xy 102.875664 40.509228)
+ (xy 102.65967 40.185971) (xy 102.173489 39.861115) (xy 101.6 39.747041) (xy 101.026511 39.861115) (xy 100.54033 40.185971)
+ (xy 100.33 40.500752) (xy 100.11967 40.185971) (xy 99.633489 39.861115) (xy 99.06 39.747041) (xy 98.486511 39.861115)
+ (xy 98.00033 40.185971) (xy 97.79 40.500752) (xy 97.57967 40.185971) (xy 97.093489 39.861115) (xy 96.52 39.747041)
+ (xy 95.946511 39.861115) (xy 95.46033 40.185971) (xy 95.244336 40.509228) (xy 95.186821 40.38651) (xy 94.754947 39.992312)
+ (xy 94.339026 39.820042) (xy 94.107 39.941183) (xy 94.107 41.148) (xy 94.127 41.148) (xy 94.127 41.402)
+ (xy 94.107 41.402) (xy 94.107 41.422) (xy 93.853 41.422) (xy 93.853 41.402) (xy 93.833 41.402)
+ (xy 93.833 41.148) (xy 93.853 41.148) (xy 93.853 39.941183) (xy 93.620974 39.820042) (xy 93.205053 39.992312)
+ (xy 92.773179 40.38651) (xy 92.715664 40.509228) (xy 92.49967 40.185971) (xy 92.013489 39.861115) (xy 91.44 39.747041)
+ (xy 90.866511 39.861115) (xy 90.38033 40.185971) (xy 90.17 40.500752) (xy 89.95967 40.185971) (xy 89.473489 39.861115)
+ (xy 88.9 39.747041) (xy 86.185 39.747041) (xy 86.185 39.185) (xy 121.815 39.185) (xy 121.815 56.815)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 102.997 50.673) (xy 103.017 50.673) (xy 103.017 50.927) (xy 102.997 50.927) (xy 102.997 50.947)
+ (xy 102.743 50.947) (xy 102.743 50.927) (xy 102.723 50.927) (xy 102.723 50.673) (xy 102.743 50.673)
+ (xy 102.743 50.653) (xy 102.997 50.653) (xy 102.997 50.673)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 97.917 50.673) (xy 97.937 50.673) (xy 97.937 50.927) (xy 97.917 50.927) (xy 97.917 50.947)
+ (xy 97.663 50.947) (xy 97.663 50.927) (xy 97.643 50.927) (xy 97.643 50.673) (xy 97.663 50.673)
+ (xy 97.663 50.653) (xy 97.917 50.653) (xy 97.917 50.673)
+ )
+ )
+ )
+ (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 557E1560) (hatch edge 0.508)
+ (connect_pads (clearance 0.508))
+ (min_thickness 0.254)
+ (fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
+ (polygon
+ (pts
+ (xy 122.5 57.5) (xy 85.5 57.5) (xy 85.5 38.5) (xy 122.5 38.5)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 102.497714 40.077756) (xy 102.173489 39.861115) (xy 101.6 39.747041) (xy 101.026511 39.861115) (xy 100.54033 40.185971)
+ (xy 100.33 40.500752) (xy 100.11967 40.185971) (xy 99.633489 39.861115) (xy 99.06 39.747041) (xy 98.486511 39.861115)
+ (xy 98.00033 40.185971) (xy 97.79 40.500752) (xy 97.57967 40.185971) (xy 97.093489 39.861115) (xy 96.52 39.747041)
+ (xy 95.946511 39.861115) (xy 95.46033 40.185971) (xy 95.244336 40.509228) (xy 95.186821 40.38651) (xy 94.754947 39.992312)
+ (xy 94.339026 39.820042) (xy 94.107 39.941183) (xy 94.107 41.148) (xy 94.127 41.148) (xy 94.127 41.402)
+ (xy 94.107 41.402) (xy 94.107 41.422) (xy 93.853 41.422) (xy 93.853 41.402) (xy 93.833 41.402)
+ (xy 93.833 41.148) (xy 93.853 41.148) (xy 93.853 39.941183) (xy 93.620974 39.820042) (xy 93.205053 39.992312)
+ (xy 92.773179 40.38651) (xy 92.715664 40.509228) (xy 92.49967 40.185971) (xy 92.013489 39.861115) (xy 91.44 39.747041)
+ (xy 90.866511 39.861115) (xy 90.38033 40.185971) (xy 90.17 40.500752) (xy 89.95967 40.185971) (xy 89.473489 39.861115)
+ (xy 88.9 39.747041) (xy 88.326511 39.861115) (xy 87.84033 40.185971) (xy 87.515474 40.672152) (xy 87.4014 41.245641)
+ (xy 87.4014 41.304359) (xy 87.515474 41.877848) (xy 87.827301 42.34453) (xy 87.794277 42.350937) (xy 87.581473 42.490727)
+ (xy 87.439023 42.70176) (xy 87.38896 42.9514) (xy 87.38896 44.6786) (xy 87.435937 44.920723) (xy 87.575727 45.133527)
+ (xy 87.78676 45.275977) (xy 88.0364 45.32604) (xy 89.7636 45.32604) (xy 90.005723 45.279063) (xy 90.218527 45.139273)
+ (xy 90.360977 44.92824) (xy 90.369179 44.88734) (xy 90.38033 44.904029) (xy 90.866511 45.228885) (xy 91.44 45.342959)
+ (xy 92.013489 45.228885) (xy 92.49967 44.904029) (xy 92.71 44.589248) (xy 92.92033 44.904029) (xy 93.406511 45.228885)
+ (xy 93.98 45.342959) (xy 94.553489 45.228885) (xy 95.03967 44.904029) (xy 95.25 44.589248) (xy 95.46033 44.904029)
+ (xy 95.946511 45.228885) (xy 96.52 45.342959) (xy 97.093489 45.228885) (xy 97.57967 44.904029) (xy 97.79 44.589248)
+ (xy 98.00033 44.904029) (xy 98.486511 45.228885) (xy 99.06 45.342959) (xy 99.633489 45.228885) (xy 100.11967 44.904029)
+ (xy 100.33 44.589248) (xy 100.54033 44.904029) (xy 100.84787 45.109521) (xy 100.896004 45.351505) (xy 101.061185 45.598715)
+ (xy 103.378 47.915531) (xy 103.378 49.406745) (xy 103.229026 49.345042) (xy 102.997 49.466183) (xy 102.997 50.673)
+ (xy 103.017 50.673) (xy 103.017 50.927) (xy 102.997 50.927) (xy 102.997 50.947) (xy 102.743 50.947)
+ (xy 102.743 50.927) (xy 102.723 50.927) (xy 102.723 50.673) (xy 102.743 50.673) (xy 102.743 49.466183)
+ (xy 102.510974 49.345042) (xy 102.095053 49.517312) (xy 101.663179 49.91151) (xy 101.605664 50.034228) (xy 101.38967 49.710971)
+ (xy 100.903489 49.386115) (xy 100.33 49.272041) (xy 99.756511 49.386115) (xy 99.27033 49.710971) (xy 99.054336 50.034228)
+ (xy 98.996821 49.91151) (xy 98.564947 49.517312) (xy 98.149026 49.345042) (xy 97.917 49.466183) (xy 97.917 50.673)
+ (xy 97.937 50.673) (xy 97.937 50.927) (xy 97.917 50.927) (xy 97.917 50.947) (xy 97.663 50.947)
+ (xy 97.663 50.927) (xy 97.643 50.927) (xy 97.643 50.673) (xy 97.663 50.673) (xy 97.663 49.466183)
+ (xy 97.430974 49.345042) (xy 97.015053 49.517312) (xy 96.583179 49.91151) (xy 96.525664 50.034228) (xy 96.30967 49.710971)
+ (xy 95.823489 49.386115) (xy 95.25 49.272041) (xy 94.676511 49.386115) (xy 94.19033 49.710971) (xy 93.865474 50.197152)
+ (xy 93.7514 50.770641) (xy 93.7514 50.829359) (xy 93.865474 51.402848) (xy 94.177301 51.86953) (xy 94.144277 51.875937)
+ (xy 93.931473 52.015727) (xy 93.789023 52.22676) (xy 93.73896 52.4764) (xy 93.73896 54.2036) (xy 93.785937 54.445723)
+ (xy 93.925727 54.658527) (xy 94.13676 54.800977) (xy 94.3864 54.85104) (xy 96.1136 54.85104) (xy 96.355723 54.804063)
+ (xy 96.568527 54.664273) (xy 96.710977 54.45324) (xy 96.719179 54.41234) (xy 96.73033 54.429029) (xy 97.216511 54.753885)
+ (xy 97.79 54.867959) (xy 98.363489 54.753885) (xy 98.658341 54.556871) (xy 100.832184 56.730715) (xy 100.958326 56.815)
+ (xy 86.185 56.815) (xy 86.185 39.185) (xy 103.390469 39.185) (xy 102.497714 40.077756)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 113.24033 44.904029) (xy 113.726511 45.228885) (xy 114.3 45.342959) (xy 114.808 45.241912) (xy 114.808 49.75527)
+ (xy 114.369234 50.194036) (xy 114.236821 49.91151) (xy 113.804947 49.517312) (xy 113.389026 49.345042) (xy 113.157 49.466183)
+ (xy 113.157 50.673) (xy 113.177 50.673) (xy 113.177 50.927) (xy 113.157 50.927) (xy 113.157 50.947)
+ (xy 112.903 50.947) (xy 112.903 50.927) (xy 112.883 50.927) (xy 112.883 50.673) (xy 112.903 50.673)
+ (xy 112.903 49.466183) (xy 112.670974 49.345042) (xy 112.522 49.406745) (xy 112.522 45.102926) (xy 112.81967 44.904029)
+ (xy 113.03 44.589248) (xy 113.24033 44.904029)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 119.507 43.688) (xy 119.527 43.688) (xy 119.527 43.942) (xy 119.507 43.942) (xy 119.507 45.148817)
+ (xy 119.739026 45.269958) (xy 119.8904 45.207261) (xy 119.8904 47.88257) (xy 118.872 48.90097) (xy 118.872 45.208255)
+ (xy 119.020974 45.269958) (xy 119.253 45.148817) (xy 119.253 43.942) (xy 119.233 43.942) (xy 119.233 43.688)
+ (xy 119.253 43.688) (xy 119.253 43.668) (xy 119.507 43.668) (xy 119.507 43.688)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 102.933179 42.16349) (xy 103.351161 42.545008) (xy 103.08033 42.725971) (xy 102.87 43.040752) (xy 102.65967 42.725971)
+ (xy 102.388828 42.545) (xy 102.65967 42.364029) (xy 102.875664 42.040772) (xy 102.933179 42.16349)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 111.887 41.148) (xy 111.907 41.148) (xy 111.907 41.402) (xy 111.887 41.402) (xy 111.887 41.422)
+ (xy 111.633 41.422) (xy 111.633 41.402) (xy 111.613 41.402) (xy 111.613 41.148) (xy 111.633 41.148)
+ (xy 111.633 41.128) (xy 111.887 41.128) (xy 111.887 41.148)
+ )
+ )
+ (filled_polygon
+ (pts
+ (xy 104.267 41.148) (xy 104.287 41.148) (xy 104.287 41.402) (xy 104.267 41.402) (xy 104.267 41.422)
+ (xy 104.013 41.422) (xy 104.013 41.402) (xy 103.993 41.402) (xy 103.993 41.148) (xy 104.013 41.148)
+ (xy 104.013 41.128) (xy 104.267 41.128) (xy 104.267 41.148)
+ )
+ )
+ )
+)
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.pro b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.pro
new file mode 100644
index 0000000..033d69e
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.pro
@@ -0,0 +1,62 @@
+update=Sun 14 Jun 2015 04:45:24 PM PDT
+version=1
+last_client=kicad
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[eeschema]
+version=1
+LibDir=
+[eeschema/libraries]
+LibName1=power
+LibName2=device
+LibName3=transistors
+LibName4=conn
+LibName5=linear
+LibName6=regul
+LibName7=74xx
+LibName8=cmos4000
+LibName9=adc-dac
+LibName10=memory
+LibName11=xilinx
+LibName12=microcontrollers
+LibName13=dsp
+LibName14=microchip
+LibName15=analog_switches
+LibName16=motorola
+LibName17=texas
+LibName18=intel
+LibName19=audio
+LibName20=interface
+LibName21=digital-audio
+LibName22=philips
+LibName23=display
+LibName24=cypress
+LibName25=siliconi
+LibName26=opto
+LibName27=atmel
+LibName28=contrib
+LibName29=valves
+[pcbnew]
+version=1
+PageLayoutDescrFile=
+LastNetListRead=
+PadDrill=3.048
+PadDrillOvalY=3.048
+PadSizeH=4.064
+PadSizeV=4.064
+PcbTextSizeV=1.5
+PcbTextSizeH=1.5
+PcbTextThickness=0.3
+ModuleTextSizeV=1
+ModuleTextSizeH=1
+ModuleTextSizeThickness=0.15
+SolderMaskClearance=0
+SolderMaskMinWidth=0
+DrawSegmentWidth=0.2
+BoardOutlineThickness=0.09999999999999999
+ModuleOutlineThickness=0.15
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.sch b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.sch
new file mode 100644
index 0000000..770041c
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/adapter/passive-rpi1/passive-rpi-hub75-adapter.sch
@@ -0,0 +1,215 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:cmos4000
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:microcontrollers
+LIBS:dsp
+LIBS:microchip
+LIBS:analog_switches
+LIBS:motorola
+LIBS:texas
+LIBS:intel
+LIBS:audio
+LIBS:interface
+LIBS:digital-audio
+LIBS:philips
+LIBS:display
+LIBS:cypress
+LIBS:siliconi
+LIBS:opto
+LIBS:atmel
+LIBS:contrib
+LIBS:valves
+EELAYER 25 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date ""
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L CONN_02X08 Panel-1
+U 1 1 54ECB236
+P 6000 3450
+F 0 "Panel-1" H 6000 3900 50 0000 C CNN
+F 1 "CONN_02X08" V 6000 3450 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x08" H 6000 2250 60 0001 C CNN
+F 3 "" H 6000 2250 60 0000 C CNN
+ 1 6000 3450
+ 1 0 0 -1
+$EndComp
+$Comp
+L CONN_02X13 P1
+U 1 1 54ECB2B7
+P 4500 3350
+F 0 "P1" H 4500 4100 50 0000 C CNN
+F 1 "RPi-Header" V 4500 3350 50 0000 C CNN
+F 2 "Pin_Headers:Pin_Header_Straight_2x13" H 4500 2400 60 0001 C CNN
+F 3 "" H 4500 2400 60 0000 C CNN
+ 1 4500 3350
+ 1 0 0 -1
+$EndComp
+$Comp
+L GND #PWR01
+U 1 1 54ECB3E1
+P 4850 3350
+F 0 "#PWR01" H 4850 3350 30 0001 C CNN
+F 1 "GND" H 4850 3280 30 0001 C CNN
+F 2 "" H 4850 3350 60 0000 C CNN
+F 3 "" H 4850 3350 60 0000 C CNN
+ 1 4850 3350
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 4750 3350 4850 3350
+$Comp
+L GND #PWR02
+U 1 1 54ECB417
+P 4850 3650
+F 0 "#PWR02" H 4850 3650 30 0001 C CNN
+F 1 "GND" H 4850 3580 30 0001 C CNN
+F 2 "" H 4850 3650 60 0000 C CNN
+F 3 "" H 4850 3650 60 0000 C CNN
+ 1 4850 3650
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 4750 3650 4850 3650
+$Comp
+L GND #PWR03
+U 1 1 54ECB4A1
+P 4850 2950
+F 0 "#PWR03" H 4850 2950 30 0001 C CNN
+F 1 "GND" H 4850 2880 30 0001 C CNN
+F 2 "" H 4850 2950 60 0000 C CNN
+F 3 "" H 4850 2950 60 0000 C CNN
+ 1 4850 2950
+ 0 -1 -1 0
+$EndComp
+Wire Wire Line
+ 4750 2950 4850 2950
+$Comp
+L GND #PWR04
+U 1 1 54ECB7BC
+P 4150 3950
+F 0 "#PWR04" H 4150 3950 30 0001 C CNN
+F 1 "GND" H 4150 3880 30 0001 C CNN
+F 2 "" H 4150 3950 60 0000 C CNN
+F 3 "" H 4150 3950 60 0000 C CNN
+ 1 4150 3950
+ 0 1 1 0
+$EndComp
+Wire Wire Line
+ 4150 3950 4250 3950
+Text GLabel 4250 3050 0 51 Output ~ 0
+strobe
+Text GLabel 4250 3450 0 51 Output ~ 0
+row_A
+Text GLabel 4750 3450 2 51 Output ~ 0
+row_B
+Text GLabel 4750 3550 2 51 Output ~ 0
+row_C
+Text GLabel 4750 3750 2 51 Output ~ 0
+row_D
+Text GLabel 4250 3250 0 51 Output ~ 0
+clock
+Text GLabel 4250 3850 0 51 Output ~ 0
+p0_r1
+Text GLabel 4250 3350 0 51 Output ~ 0
+p0_g1
+Text GLabel 4750 3950 2 51 Output ~ 0
+p0_b1
+Text GLabel 4750 3850 2 51 Output ~ 0
+p0_r2
+Text GLabel 4250 3750 0 51 Output ~ 0
+p0_g2
+Text GLabel 4250 3650 0 51 Output ~ 0
+p0_b2
+Text GLabel 4750 3250 2 51 Output ~ 0
+OE
+Wire Wire Line
+ 6250 3400 6800 3400
+$Comp
+L GND #PWR05
+U 1 1 54ECD031
+P 6800 3850
+F 0 "#PWR05" H 6800 3850 30 0001 C CNN
+F 1 "GND" H 6800 3780 30 0001 C CNN
+F 2 "" H 6800 3850 60 0000 C CNN
+F 3 "" H 6800 3850 60 0000 C CNN
+ 1 6800 3850
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 6250 3800 6800 3800
+Wire Wire Line
+ 6250 3200 6800 3200
+Wire Wire Line
+ 6800 3200 6800 3850
+Connection ~ 6800 3400
+Connection ~ 6800 3800
+Text GLabel 6250 3300 2 51 Input ~ 0
+p0_g2
+Text GLabel 6250 3100 2 51 Input ~ 0
+p0_g1
+Text GLabel 6250 3600 2 51 Input ~ 0
+row_D
+Text GLabel 6250 3500 2 51 Input ~ 0
+row_B
+Text GLabel 5750 3100 0 51 Input ~ 0
+p0_r1
+Text GLabel 5750 3700 0 51 Input ~ 0
+clock
+Text GLabel 5750 3400 0 51 Input ~ 0
+p0_b2
+Text GLabel 5750 3200 0 51 Input ~ 0
+p0_b1
+Text GLabel 5750 3300 0 51 Input ~ 0
+p0_r2
+Text GLabel 5750 3800 0 51 Input ~ 0
+OE
+Text GLabel 5750 3500 0 51 Input ~ 0
+row_A
+Text GLabel 5750 3600 0 51 Input ~ 0
+row_C
+Text GLabel 6250 3700 2 51 Input ~ 0
+strobe
+NoConn ~ 4250 2750
+NoConn ~ 4250 3150
+NoConn ~ 4250 3550
+NoConn ~ 4750 3150
+NoConn ~ 4750 2750
+NoConn ~ 4750 2850
+NoConn ~ 4250 2850
+NoConn ~ 4250 2950
+NoConn ~ 4750 3050
+$Comp
+L PWR_FLAG #FLG06
+U 1 1 557E1359
+P 4200 4050
+F 0 "#FLG06" H 4200 4145 50 0001 C CNN
+F 1 "PWR_FLAG" H 4200 4230 50 0000 C CNN
+F 2 "" H 4200 4050 60 0000 C CNN
+F 3 "" H 4200 4050 60 0000 C CNN
+ 1 4200 4050
+ -1 0 0 1
+$EndComp
+Wire Wire Line
+ 4200 3950 4200 4050
+Connection ~ 4200 3950
+$EndSCHEMATC
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/README.md
new file mode 100644
index 0000000..68217e0
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/README.md
@@ -0,0 +1,3 @@
+Various bindings to other programming languages.
+Typically these are wrapping the [C-binding](../include/led-matrix-c.h) that
+comes with rpi-rgb-led-matrix
\ No newline at end of file
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/.gitignore b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/.gitignore
new file mode 100644
index 0000000..8620bdd
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/.gitignore
@@ -0,0 +1,2 @@
+*.dll
+*.exe
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/Makefile
new file mode 100644
index 0000000..2e55fb6
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/Makefile
@@ -0,0 +1,21 @@
+CSHARP_LIB=RGBLedMatrix.dll
+SOURCES=RGBLedCanvas.cs RGBLedMatrix.cs RGBLedFont.cs
+CSHARP_COMPILER=mcs
+
+RGB_LIBDIR=../../lib
+RGB_LIBRARY_NAME=rgbmatrix
+RGB_LIBRARY=$(RGB_LIBDIR)/lib$(RGB_LIBRARY_NAME).so.1
+
+EXAMPLES_DIR=examples
+
+$(CSHARP_LIB) : $(SOURCES) $(RGB_LIBRARY)
+ $(CSHARP_COMPILER) -target:library -out:$@ $(SOURCES)
+
+$(RGB_LIBRARY):
+ $(MAKE) -C $(RGB_LIBDIR)
+
+build: $(CSHARP_LIB)
+ $(MAKE) -C $(EXAMPLES_DIR) all
+
+clean:
+ rm -f $(CSHARP_LIB)
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/README.md
new file mode 100644
index 0000000..10e9cb6
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/README.md
@@ -0,0 +1,31 @@
+C# bindings for RGB Matrix library
+======================================
+
+Building
+--------
+
+To build the C# wrapper for the RGB Matrix C library you need to first have mono installed.
+
+### Install Mono
+
+```shell
+$ sudo apt-get update
+$ sudo apt-get install mono-complete
+```
+
+Then, in the root directory for the matrix library type
+
+```shell
+make build-csharp
+```
+
+To run the example applications in the c#\examples folder
+
+```shell
+sudo mono minimal-example.exe
+```
+
+Notes
+--------
+
+C# applications look for libraries in the working directory of the application. To use this library for your own projects you will need to ensure you have RGBLedMatrix.dll and librgbmatrix.so in the same folder as your exe.
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedCanvas.cs b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedCanvas.cs
new file mode 100644
index 0000000..74c1548
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedCanvas.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace rpi_rgb_led_matrix_sharp
+{
+ public class RGBLedCanvas
+ {
+ #region DLLImports
+ [DllImport("librgbmatrix.so")]
+ internal static extern void led_canvas_get_size(IntPtr canvas, out int width, out int height);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern void led_canvas_set_pixel(IntPtr canvas, int x, int y, byte r, byte g, byte b);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern void led_canvas_clear(IntPtr canvas);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern void led_canvas_fill(IntPtr canvas, byte r, byte g, byte b);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern void draw_circle(IntPtr canvas, int xx, int y, int radius, byte r, byte g, byte b);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern void draw_line(IntPtr canvas, int x0, int y0, int x1, int y1, byte r, byte g, byte b);
+ #endregion
+
+ // This is a wrapper for canvas no need to implement IDisposable here
+ // because RGBLedMatrix has ownership and takes care of disposing canvases
+ internal IntPtr _canvas;
+
+ // this is not called directly by the consumer code,
+ // consumer uses factory methods in RGBLedMatrix
+ internal RGBLedCanvas(IntPtr canvas)
+ {
+ _canvas = canvas;
+ int width;
+ int height;
+ led_canvas_get_size(_canvas, out width, out height);
+ Width = width;
+ Height = height;
+ }
+
+ public int Width {get; private set; }
+ public int Height { get; private set; }
+
+ public void SetPixel(int x, int y, Color color)
+ {
+ led_canvas_set_pixel(_canvas, x, y, color.R, color.G, color.B);
+ }
+
+ public void Fill(Color color)
+ {
+ led_canvas_fill(_canvas, color.R, color.G, color.B);
+ }
+
+ public void Clear()
+ {
+ led_canvas_clear(_canvas);
+ }
+
+ public void DrawCircle(int x0, int y0, int radius, Color color)
+ {
+ draw_circle(_canvas, x0, y0, radius, color.R, color.G, color.B);
+ }
+
+ public void DrawLine (int x0, int y0, int x1, int y1, Color color)
+ {
+ draw_line(_canvas, x0, y0, x1, y1, color.R, color.G, color.B);
+ }
+
+ public int DrawText(RGBLedFont font, int x, int y, Color color, string text, int spacing=0, bool vertical=false)
+ {
+ return font.DrawText(_canvas, x, y, color, text, spacing, vertical);
+ }
+ }
+
+ public struct Color
+ {
+ public Color (int r, int g, int b)
+ {
+ R = (byte)r;
+ G = (byte)g;
+ B = (byte)b;
+ }
+ public Color(byte r, byte g, byte b)
+ {
+ R = r;
+ G = g;
+ B = b;
+ }
+ public byte R;
+ public byte G;
+ public byte B;
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedFont.cs b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedFont.cs
new file mode 100644
index 0000000..4e3b7f8
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedFont.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace rpi_rgb_led_matrix_sharp
+{
+ public class RGBLedFont : IDisposable
+ {
+ [DllImport("librgbmatrix.so", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern IntPtr load_font(string bdf_font_file);
+
+ [DllImport("librgbmatrix.so", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern int draw_text(IntPtr canvas, IntPtr font, int x, int y, byte r, byte g, byte b, string utf8_text, int extra_spacing);
+
+ [DllImport("librgbmatrix.so", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern int vertical_draw_text(IntPtr canvas, IntPtr font, int x, int y, byte r, byte g, byte b, string utf8_text, int kerning_offset);
+
+ [DllImport("librgbmatrix.so", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern void delete_font(IntPtr font);
+
+ public RGBLedFont(string bdf_font_file_path)
+ {
+ _font = load_font(bdf_font_file_path);
+ }
+ internal IntPtr _font;
+
+ internal int DrawText(IntPtr canvas, int x, int y, Color color, string text, int spacing=0, bool vertical=false)
+ {
+ if (!vertical)
+ return draw_text(canvas, _font, x, y, color.R, color.G, color.B, text, spacing);
+ else
+ return vertical_draw_text(canvas, _font, x, y, color.R, color.G, color.B, text, spacing);
+ }
+
+ #region IDisposable Support
+ private bool disposedValue = false;
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!disposedValue)
+ {
+ delete_font(_font);
+ disposedValue = true;
+ }
+ }
+ ~RGBLedFont()
+ {
+ Dispose(false);
+ }
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+ #endregion
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedMatrix.cs b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedMatrix.cs
new file mode 100644
index 0000000..59135d0
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/RGBLedMatrix.cs
@@ -0,0 +1,299 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace rpi_rgb_led_matrix_sharp
+{
+ public class RGBLedMatrix : IDisposable
+ {
+ #region DLLImports
+ [DllImport("librgbmatrix.so")]
+ internal static extern IntPtr led_matrix_create(int rows, int chained, int parallel);
+
+ [DllImport("librgbmatrix.so", CallingConvention= CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+ internal static extern IntPtr led_matrix_create_from_options_const_argv(
+ ref InternalRGBLedMatrixOptions options,
+ int argc,
+ string[] argv);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern void led_matrix_delete(IntPtr matrix);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern IntPtr led_matrix_create_offscreen_canvas(IntPtr matrix);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern IntPtr led_matrix_swap_on_vsync(IntPtr matrix, IntPtr canvas);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern IntPtr led_matrix_get_canvas(IntPtr matrix);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern byte led_matrix_get_brightness(IntPtr matrix);
+
+ [DllImport("librgbmatrix.so")]
+ internal static extern void led_matrix_set_brightness(IntPtr matrix, byte brightness);
+ #endregion
+
+ public RGBLedMatrix(int rows, int chained, int parallel)
+ {
+ matrix= led_matrix_create(rows, chained, parallel);
+ }
+
+ public RGBLedMatrix(RGBLedMatrixOptions options)
+ {
+ var opt = new InternalRGBLedMatrixOptions();
+
+ try {
+ // pass in options to internal data structure
+ opt.chain_length = options.ChainLength;
+ opt.rows = options.Rows;
+ opt.cols = options.Cols;
+ opt.hardware_mapping = options.HardwareMapping != null ? Marshal.StringToHGlobalAnsi(options.HardwareMapping) : IntPtr.Zero;
+ opt.inverse_colors = (byte)(options.InverseColors ? 1 : 0);
+ opt.led_rgb_sequence = options.LedRgbSequence != null ? Marshal.StringToHGlobalAnsi(options.LedRgbSequence) : IntPtr.Zero;
+ opt.pixel_mapper_config = options.PixelMapperConfig != null ? Marshal.StringToHGlobalAnsi(options.PixelMapperConfig) : IntPtr.Zero;
+ opt.panel_type = options.PanelType != null ? Marshal.StringToHGlobalAnsi(options.PanelType) : IntPtr.Zero;
+ opt.parallel = options.Parallel;
+ opt.multiplexing = options.Multiplexing;
+ opt.pwm_bits = options.PwmBits;
+ opt.pwm_lsb_nanoseconds = options.PwmLsbNanoseconds;
+ opt.pwm_dither_bits = options.PwmDitherBits;
+ opt.scan_mode = options.ScanMode;
+ opt.show_refresh_rate = (byte)(options.ShowRefreshRate ? 1 : 0);
+ opt.limit_refresh_rate_hz = options.LimitRefreshRateHz;
+ opt.brightness = options.Brightness;
+ opt.disable_hardware_pulsing = (byte)(options.DisableHardwarePulsing ? 1 : 0);
+ opt.row_address_type = options.RowAddressType;
+
+ string[] cmdline_args = Environment.GetCommandLineArgs();
+
+ // Because gpio-slowdown is not provided in the options struct,
+ // we manually add it.
+ // Let's add it first to the command-line we pass to the
+ // matrix constructor, so that it can be overridden with the
+ // users' commandline.
+ // As always, as the _very_ first, we need to provide the
+ // program name argv[0], so this is why our slowdown_arg
+ // array will have these two elements.
+ //
+ // Given that we can't initialize the C# struct with a slowdown
+ // that is not 0, we just override it here with 1 if we see 0
+ // (zero only really is usable on super-slow vey old Rpi1,
+ // but for everyone else, it would be a nuisance. So we use
+ // 0 as our sentinel).
+ string[] slowdown_arg = new string[] {cmdline_args[0], "--led-slowdown-gpio="+(options.GpioSlowdown == 0 ? 1 : options.GpioSlowdown) };
+
+ string[] argv = new string[ 2 + cmdline_args.Length-1];
+
+ // Progname + slowdown arg first
+ slowdown_arg.CopyTo(argv, 0);
+
+ // Remaining args (excluding program name) then. This allows
+ // the user to not only provide any of the other --led-*
+ // options, but also override the --led-slowdown-gpio arg on
+ // the commandline.
+ Array.Copy(cmdline_args, 1, argv, 2, cmdline_args.Length-1);
+
+ int argc = argv.Length;
+
+ matrix = led_matrix_create_from_options_const_argv(ref opt, argc, argv);
+ }
+ finally
+ {
+ if (options.HardwareMapping != null) Marshal.FreeHGlobal(opt.hardware_mapping);
+ if (options.LedRgbSequence != null) Marshal.FreeHGlobal(opt.led_rgb_sequence);
+ if (options.PixelMapperConfig != null) Marshal.FreeHGlobal(opt.pixel_mapper_config);
+ if (options.PanelType != null) Marshal.FreeHGlobal(opt.panel_type);
+ }
+ }
+
+ private IntPtr matrix;
+
+ public RGBLedCanvas CreateOffscreenCanvas()
+ {
+ var canvas=led_matrix_create_offscreen_canvas(matrix);
+ return new RGBLedCanvas(canvas);
+ }
+
+ public RGBLedCanvas GetCanvas()
+ {
+ var canvas = led_matrix_get_canvas(matrix);
+ return new RGBLedCanvas(canvas);
+ }
+
+ public RGBLedCanvas SwapOnVsync(RGBLedCanvas canvas)
+ {
+ canvas._canvas = led_matrix_swap_on_vsync(matrix, canvas._canvas);
+ return canvas;
+ }
+
+ public byte Brightness
+ {
+ get { return led_matrix_get_brightness(matrix); }
+ set { led_matrix_set_brightness(matrix, value); }
+ }
+
+ #region IDisposable Support
+ private bool disposedValue = false;
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!disposedValue)
+ {
+ led_matrix_delete(matrix);
+ disposedValue = true;
+ }
+ }
+ ~RGBLedMatrix() {
+ Dispose(false);
+ }
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+ #endregion
+
+ #region RGBLedMatrixOptions struct
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
+ internal struct InternalRGBLedMatrixOptions
+ {
+ public IntPtr hardware_mapping;
+ public int rows;
+ public int cols;
+ public int chain_length;
+ public int parallel;
+ public int pwm_bits;
+ public int pwm_lsb_nanoseconds;
+ public int pwm_dither_bits;
+ public int brightness;
+ public int scan_mode;
+ public int row_address_type;
+ public int multiplexing;
+ public IntPtr led_rgb_sequence;
+ public IntPtr pixel_mapper_config;
+ public IntPtr panel_type;
+ public byte disable_hardware_pulsing;
+ public byte show_refresh_rate;
+ public byte inverse_colors;
+ public int limit_refresh_rate_hz;
+ };
+ #endregion
+ }
+
+ public struct RGBLedMatrixOptions
+ {
+ ///
+ /// Name of the hardware mapping used. If passed NULL here, the default is used.
+ ///
+ public string HardwareMapping;
+
+ ///
+ /// The "rows" are the number of rows supported by the display, so 32 or 16.
+ /// Default: 32.
+ ///
+ public int Rows;
+
+ ///
+ /// The "cols" are the number of columns per panel. Typically something
+ /// like 32, but also 64 is possible. Sometimes even 40.
+ /// cols * chain_length is the total length of the display, so you can
+ /// represent a 64 wide display as cols=32, chain=2 or cols=64, chain=1;
+ /// same thing, but more convenient to think of.
+ ///
+ public int Cols;
+
+ ///
+ /// The chain_length is the number of displays daisy-chained together
+ /// (output of one connected to input of next). Default: 1
+ ///
+ public int ChainLength;
+
+ ///
+ /// The number of parallel chains connected to the Pi; in old Pis with 26
+ /// GPIO pins, that is 1, in newer Pis with 40 interfaces pins, that can also
+ /// be 2 or 3. The effective number of pixels in vertical direction is then
+ /// thus rows * parallel. Default: 1
+ ///
+ public int Parallel;
+
+ ///
+ /// Set PWM bits used for output. Default is 11, but if you only deal with limited
+ /// comic-colors, 1 might be sufficient. Lower require less CPU and increases refresh-rate.
+ ///
+ public int PwmBits;
+
+ ///
+ /// Change the base time-unit for the on-time in the lowest significant bit in
+ /// nanoseconds. Higher numbers provide better quality (more accurate color, less
+ /// ghosting), but have a negative impact on the frame rate.
+ ///
+ public int PwmLsbNanoseconds;
+
+ ///
+ /// The lower bits can be time-dithered for higher refresh rate.
+ ///
+ public int PwmDitherBits;
+
+ ///
+ /// The initial brightness of the panel in percent. Valid range is 1..100
+ ///
+ public int Brightness;
+
+ ///
+ /// Scan mode: 0=progressive, 1=interlaced
+ ///
+ public int ScanMode;
+
+ ///
+ /// Default row address type is 0, corresponding to direct setting of the
+ /// row, while row address type 1 is used for panels that only have A/B,
+ /// typically some 64x64 panels
+ ///
+ public int RowAddressType;
+
+ ///
+ /// Type of multiplexing. 0 = direct, 1 = stripe, 2 = checker (typical 1:8)
+ ///
+ public int Multiplexing;
+
+ ///
+ /// In case the internal sequence of mapping is not "RGB", this contains the real mapping. Some panels mix up these colors.
+ ///
+ public string LedRgbSequence;
+
+ ///
+ /// A string describing a sequence of pixel mappers that should be applied
+ /// to this matrix. A semicolon-separated list of pixel-mappers with optional
+ /// parameter.
+ public string PixelMapperConfig;
+
+ ///
+ /// Panel type. Typically just empty, but certain panels (FM6126)
+ /// requie an initialization sequence
+ ///
+ public string PanelType;
+
+ ///
+ /// Allow to use the hardware subsystem to create pulses. This won't do anything if output enable is not connected to GPIO 18.
+ ///
+ public bool DisableHardwarePulsing;
+ public bool ShowRefreshRate;
+ public bool InverseColors;
+
+ ///
+ /// Limit refresh rate of LED panel. This will help on a loaded system
+ // to keep a constant refresh rate. <= 0 for no limit.
+ ///
+ public int LimitRefreshRateHz;
+
+ ///
+ /// Slowdown GPIO. Needed for faster Pis/slower panels.
+ ///
+ public int GpioSlowdown;
+ };
+}
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/Makefile
new file mode 100644
index 0000000..49808ec
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/Makefile
@@ -0,0 +1,41 @@
+CSHARP_LIB=RGBLedMatrix.dll
+CSHARP_COMPILER=mcs
+CSHARP_LIBDIR=..
+CSHARP_LIBRARY=$(CSHARP_LIBDIR)/$(CSHARP_LIB)
+
+RGB_LIBDIR=../../../lib
+RGB_LIBRARY_NAME=librgbmatrix
+RGB_LIBRARY=$(RGB_LIBDIR)/$(RGB_LIBRARY_NAME).so.1
+
+all: $(CSHARP_LIB)
+ cp $(RGB_LIBRARY) $(RGB_LIBRARY_NAME).so
+ cp $(CSHARP_LIBRARY) $(CSHARP_LIB)
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:minimal-example.exe minimal-example.cs
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:matrix-rain.exe matrix-rain.cs
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:font-example.exe font-example.cs
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:pulsing-brightness.exe pulsing-brightness.cs
+
+minimal-example.exe: $(CSHARP_LIB)
+ cp $(RGB_LIBRARY) $(RGB_LIBRARY_NAME).so
+ cp $(CSHARP_LIBRARY) $(CSHARP_LIB)
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:minimal-example.exe minimal-example.cs
+
+matrix-rain.exe: $(CSHARP_LIB)
+ cp $(RGB_LIBRARY) $(RGB_LIBRARY_NAME).so
+ cp $(CSHARP_LIBRARY) $(CSHARP_LIB)
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:matrix-rain.exe matrix-rain.cs
+
+font-example.exe: $(CSHARP_LIB)
+ cp $(RGB_LIBRARY) $(RGB_LIBRARY_NAME).so
+ cp $(CSHARP_LIBRARY) $(CSHARP_LIB)
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:font-example.exe font-example.cs
+
+pulsing-brightness.exe: $(CSHARP_LIB)
+ cp $(RGB_LIBRARY) $(RGB_LIBRARY_NAME).so
+ cp $(CSHARP_LIBRARY) $(CSHARP_LIB)
+ $(CSHARP_COMPILER) -r:$(CSHARP_LIB) -out:pulsing-brightness.exe pulsing-brightness.cs
+
+$(CSHARP_LIB) :
+ $(MAKE) -C $(CSHARP_LIBDIR)
+
+.PHONY : all
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/font-example.cs b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/font-example.cs
new file mode 100644
index 0000000..4638314
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/font-example.cs
@@ -0,0 +1,36 @@
+using rpi_rgb_led_matrix_sharp;
+using System;
+using System.Threading;
+
+namespace font_example
+{
+ class Program
+ {
+ static int Main(string[] args)
+ {
+ if (args.Length < 1)
+ {
+ Console.WriteLine("font-example.exe [font_path] ");
+ return -1;
+ }
+ string text = "Hello World!";
+ if (args.Length > 1)
+ text = args[1];
+
+
+ var matrix = new RGBLedMatrix(32, 2, 1);
+ var canvas = matrix.CreateOffscreenCanvas();
+ var font = new RGBLedFont(args[0]);
+
+ canvas.DrawText(font, 1, 6, new Color(0, 255, 0), text);
+ matrix.SwapOnVsync(canvas);
+
+ while (!Console.KeyAvailable)
+ {
+ Thread.Sleep(250);
+ }
+
+ return 0;
+ }
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/matrix-rain.cs b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/matrix-rain.cs
new file mode 100644
index 0000000..fe8d6b7
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/matrix-rain.cs
@@ -0,0 +1,90 @@
+using rpi_rgb_led_matrix_sharp;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Threading;
+
+namespace matrix_rain
+{
+ class Program
+ {
+ const int MAX_HEIGHT = 16;
+ const int COLOR_STEP = 15;
+ const int FRAME_STEP = 1;
+
+ static int Main(string[] args)
+ {
+
+ var matrix = new RGBLedMatrix(new RGBLedMatrixOptions { ChainLength = 2 });
+ var canvas = matrix.CreateOffscreenCanvas();
+ var rnd = new Random();
+ var points = new List();
+ var recycled = new Stack();
+ int frame = 0;
+ var stopwatch = new Stopwatch();
+
+ while (!Console.KeyAvailable) {
+ stopwatch.Restart();
+
+ frame++;
+
+ if (frame % FRAME_STEP == 0)
+ {
+ if (recycled.Count == 0)
+ points.Add(new Point(rnd.Next(0, canvas.Width - 1), 0));
+ else
+ {
+ var point = recycled.Pop();
+ point.x = rnd.Next(0, canvas.Width - 1);
+ point.y = 0;
+ point.recycled = false;
+ }
+ }
+
+ canvas.Clear();
+
+ foreach (var point in points)
+ {
+ if (!point.recycled)
+ {
+ point.y++;
+
+ if (point.y - MAX_HEIGHT > canvas.Height)
+ {
+ point.recycled = true;
+ recycled.Push(point);
+ }
+
+ for (var i=0; i< MAX_HEIGHT; i++)
+ {
+ canvas.SetPixel(point.x, point.y - i, new Color(0, 255 - i * COLOR_STEP, 0));
+ }
+ }
+ }
+
+ canvas = matrix.SwapOnVsync(canvas);
+
+ // force 30 FPS
+ var elapsed= stopwatch.ElapsedMilliseconds;
+ if (elapsed < 33)
+ {
+ Thread.Sleep(33 - (int)elapsed);
+ }
+ }
+
+ return 0;
+ }
+
+ class Point
+ {
+ public Point(int x, int y)
+ {
+ this.x = x;
+ this.y = y;
+ }
+ public int x;
+ public int y;
+ public bool recycled;
+ }
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/minimal-example.cs b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/minimal-example.cs
new file mode 100644
index 0000000..90a447c
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/minimal-example.cs
@@ -0,0 +1,32 @@
+using rpi_rgb_led_matrix_sharp;
+
+namespace minimal_example
+{
+ class Program
+ {
+ static int Main(string[] args)
+ {
+
+ var matrix= new RGBLedMatrix(32, 2, 1);
+ var canvas = matrix.CreateOffscreenCanvas();
+
+ for (var i = 0; i < 1000; ++i)
+ {
+ for (var y = 0; y < canvas.Height; ++y)
+ {
+ for (var x = 0; x < canvas.Width; ++x)
+ {
+ canvas.SetPixel(x, y, new Color(i & 0xff, x, y));
+ }
+ }
+ canvas.DrawCircle(canvas.Width / 2, canvas.Height / 2, 6, new Color(0, 0, 255));
+ canvas.DrawLine(canvas.Width / 2 - 3, canvas.Height / 2 - 3, canvas.Width / 2 + 3, canvas.Height / 2 + 3, new Color(0, 0, 255));
+ canvas.DrawLine(canvas.Width / 2 - 3, canvas.Height / 2 + 3, canvas.Width / 2 + 3, canvas.Height / 2 - 3, new Color(0, 0, 255));
+
+ canvas = matrix.SwapOnVsync(canvas);
+ }
+
+ return 0;
+ }
+ }
+}
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/pulsing-brightness.cs b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/pulsing-brightness.cs
new file mode 100644
index 0000000..c5ef8b4
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/c#/examples/pulsing-brightness.cs
@@ -0,0 +1,54 @@
+using rpi_rgb_led_matrix_sharp;
+using System;
+using System.Threading;
+
+namespace pulsing_brightness
+{
+ class Program
+ {
+ static int Main(string[] args)
+ {
+ var matrix = new RGBLedMatrix(new RGBLedMatrixOptions {Rows = 32, Cols = 64});
+ var canvas = matrix.CreateOffscreenCanvas();
+ var maxBrightness = matrix.Brightness;
+ var count = 0;
+ const int c = 255;
+
+ while (!Console.KeyAvailable)
+ {
+ if (matrix.Brightness < 1)
+ {
+ matrix.Brightness = maxBrightness;
+ count += 1;
+ }
+ else
+ {
+ matrix.Brightness -= 1;
+ }
+
+ switch (count % 4)
+ {
+ case 0:
+ canvas.Fill(new Color(c, 0, 0));
+ break;
+ case 1:
+ canvas.Fill(new Color(0, c, 0));
+ break;
+ case 2:
+ canvas.Fill(new Color(0, 0, c));
+ break;
+ case 3:
+ canvas.Fill(new Color(c, c, c));
+ break;
+ }
+
+ canvas = matrix.SwapOnVsync(canvas);
+
+ Thread.Sleep(20);
+ }
+
+ return 0;
+ }
+ }
+}
+
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/.gitignore b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/.gitignore
new file mode 100644
index 0000000..a007fea
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/.gitignore
@@ -0,0 +1 @@
+build/*
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/Makefile
new file mode 100644
index 0000000..9293eda
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/Makefile
@@ -0,0 +1,92 @@
+# TODO: This contains a lot of {c|p}ython build boilerplate, this needs cleanup.
+PYTHON ?= python
+SETUP := setup.py
+BUILD_ARGS := build --build-lib .
+INST_ARGS := install
+ifdef DESTDIR
+INST_ARGS += --root=$(DESTDIR)
+endif
+CLEAN_ARGS := clean --all
+
+MANPAGES := $(patsubst %.txt,%,$(wildcard *.txt))
+TXTTOMAN := a2x -f manpage
+
+# Where our library resides. It is split between includes and the binary
+# library in lib
+RGB_LIBDIR=../../lib
+RGB_LIBRARY_NAME=rgbmatrix
+RGB_LIBRARY=$(RGB_LIBDIR)/lib$(RGB_LIBRARY_NAME).a
+
+ifneq "$(wildcard debian/changelog)" ""
+PKGNAME := $(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
+VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version: \([^-]*\).*/\1/p')
+UPSDIST := $(PKGNAME)-$(VERSION).tar.gz
+DEBDIST := $(PKGNAME)_$(VERSION).orig.tar.gz
+endif
+
+all: build
+build: build-python
+install: install-python
+clean: clean-python
+ find ./rgbmatrix -type f -name \*.so -delete
+ find . -type f -name \*.pyc -delete
+ $(RM) build-* install-* test-*
+
+$(RGB_LIBRARY): FORCE
+ $(MAKE) -C $(RGB_LIBDIR)
+
+test: test-python
+test-python:
+ifneq "$(wildcard tests/*.py)" ""
+ nosetests -v -w tests
+else
+ $(info Test suite is not implemented...)
+endif
+
+ifneq "$(wildcard debian/control)" ""
+PYVERS := $(shell pyversions -r -v debian/control)
+PYEXEC := $(shell pyversions -d)
+BUILD_ARGS += --executable=/usr/bin/$(PYEXEC)
+INST_ARGS += --no-compile -O0
+
+build-python: $(PYVERS:%=build-python-%)
+build-python-%: $(RGB_LIBRARY)
+ $(info * Doing build for $(PYTHON)$* ...)
+ $(PYTHON)$* $(SETUP) $(BUILD_ARGS)
+
+install-python: $(PYVERS:%=install-python-%)
+install-python-%:
+ $(info * Doing install for $(PYTHON)$* ...)
+ $(PYTHON)$* $(SETUP) $(INST_ARGS)
+
+clean-python: $(PYVERS:%=clean-python-%)
+clean-python-%:
+ $(PYTHON)$* $(SETUP) $(CLEAN_ARGS)
+else
+build-python: $(RGB_LIBRARY)
+ $(PYTHON) $(SETUP) $(BUILD_ARGS)
+
+install-python:
+ $(PYTHON) $(SETUP) $(INST_ARGS)
+
+clean-python:
+ $(PYTHON) $(SETUP) $(CLEAN_ARGS)
+endif
+
+distclean: clean
+dist: distclean
+ $(info * Creating ../$(UPSDIST) and ../$(DEBDIST))
+ @tar --exclude='.svn' \
+ --exclude='*.swp' \
+ --exclude='debian' \
+ -czvf ../$(UPSDIST) \
+ -C ../ $(notdir $(CURDIR))
+ @cp ../$(UPSDIST) ../$(DEBDIST)
+ @if test -d ../tarballs; then \
+ mv -v ../$(DEBDIST) ../tarballs; \
+ fi
+
+FORCE:
+.PHONY: FORCE
+.PHONY: build install test clean dist distclean
+.PHONY: build-python install-python clean-python
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/README.md b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/README.md
new file mode 100755
index 0000000..cdc28d8
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/README.md
@@ -0,0 +1,147 @@
+Python bindings for RGB Matrix library
+======================================
+
+Building
+--------
+
+If you have a different than the standard wiring (for instance if you have an
+Adafruit HAT), you can edit the [../../lib/Makefile](../../lib/Makefile#L26) first to choose
+the hardware in question (see below for setting it via command line argument).
+
+Then, in the root directory for the matrix library simply type:
+
+### Python 2
+
+```shell
+sudo apt-get update && sudo apt-get install python2.7-dev python-pillow -y
+make build-python
+sudo make install-python
+```
+
+### Python 3
+You can also build for Python 3:
+
+```shell
+sudo apt-get update && sudo apt-get install python3-dev python3-pillow -y
+make build-python PYTHON=$(which python3)
+sudo make install-python PYTHON=$(which python3)
+```
+
+### PyPy
+The cython binding to PyPy seems to be somewhat working but extremely slow (20x
+slower even than the regular Python binding, 160x slower than C++), so this is
+not recommended.
+
+So Cython is not good together with PyPy which works best with a
+[CFFI](https://cffi.readthedocs.io/) binding. @Duality4Y did an experiment here
+https://github.com/Duality4Y/rgb-matrix-cffi which works well with PyPy and is
+about twice as fast as running Python3+cython (but Python3+cffi is slower than
+Python3+cython, so we can't just replace everything with cffi).
+
+Of course, it would be nice to have the fastest possible binding to all kinds
+of Python interpreters. If anyone wants to work on that, this would certainly
+be a welcome pull request.
+
+Performance
+-----------
+The simplicity of scripting comes at a price: Python is slower than C++ of
+course.
+If you have to do a lot of pixel updates in your demo, this can be too slow
+depending on what you do. Here are some rough numbers for calling `SetPixel()`
+in a tight loop:
+
+ * On a Pi-2 and Pi-3, a Python script will be about 1/8 of the speed compared
+ to the corresponding C++ program (pushing ~0.43 Megapixels/s Python
+ vs. ~3.5 Megapixels/s C++ on a Pi-3 for instance)
+ * On a Pi-1, the difference is even worse: 1/24 of the speed to the
+ corresponding C++ program. Given that the Pi-1 is already about 1/10 the
+ speed of a Pi-3, this almost makes Python unusable on a Pi-1
+ (~0.015 Megapixels/s Python vs. ~0.36 Megapixels/s C++)
+ * Also interesting: Python3 is a little bit slower than Python2.7.
+ So if you can, stick with Python2.7 for now.
+ * The good news is, that this is due to overhead per function call. If you
+ can do more per function call, then this is less problematic. For instance
+ if you have an image to be displayed with `SetImage()`, that will much faster
+ per pixel (internally this then copies the pixels natively).
+
+The ~0.015 Megapixels/s on a Pi-1 means that you can update a 32x32 matrix
+at most with ~15fps. If you have chained 5, then you barely reach 3fps.
+In a Pi-3, you get about 400fps update rate (85fps for 5-chain) with a Python
+program (while with C++, you can do the same thing with a comfortable 3500fps
+(700fps for 5)). Keep in mind that this is if all you do is just calling
+`SetPixel()`, it does not include any time of what you actually want to do in
+your demo - so anything in addition to that will drop your update rate.
+
+If you can prepare the animation you want to show, then you can either prepare
+images and then use the much faster call to `SetImage()`, or can fill
+entire offscreen-frames (create with `CreateFrameCanvas()`) and then
+swap with `SwapOnVSync()` (this is the fastest method).
+
+Using the library
+-----------------
+
+Be aware of the fact that using the full performance of the RGBMatrix requires root privileges.
+Therefore you should run all you python scripts as using `sudo`.
+
+You may find examples in the [samples/](./samples) subdirectory.
+The examples all use the [samplebase.py](./samples/samplebase.py) that provides
+some basic capabilities to all example programs, such as command-line parsing: all
+sample-programs accept `--led-rows`, `--led-chain` and `--led-parallel` as
+command line options to adapt to your configuration
+
+```bash
+cd samples
+sudo ./runtext.py --led-chain=4
+```
+
+To use different wiring without recompiling the library to change the default,
+you can use `--led-gpio-mapping` (or `-m`). For example, to use Adafruit HAT:
+```bash
+sudo ./runtext.py --led-gpio-mapping=adafruit-hat
+```
+
+Here is a complete example showing how to write an image viewer:
+```python
+#!/usr/bin/env python
+import time
+import sys
+
+from rgbmatrix import RGBMatrix, RGBMatrixOptions
+from PIL import Image
+
+if len(sys.argv) < 2:
+ sys.exit("Require an image argument")
+else:
+ image_file = sys.argv[1]
+
+image = Image.open(image_file)
+
+# Configuration for the matrix
+options = RGBMatrixOptions()
+options.rows = 32
+options.chain_length = 1
+options.parallel = 1
+options.hardware_mapping = 'regular' # If you have an Adafruit HAT: 'adafruit-hat'
+
+matrix = RGBMatrix(options = options)
+
+# Make image fit our screen.
+image.thumbnail((matrix.width, matrix.height), Image.ANTIALIAS)
+
+matrix.SetImage(image.convert('RGB'))
+
+try:
+ print("Press CTRL-C to stop.")
+ while True:
+ time.sleep(100)
+except KeyboardInterrupt:
+ sys.exit(0)
+```
+
+## API
+
+The source of truth for what is available in the Python bindings may be found [here](rgbmatrix/core.pyx) (RGBMatrix, FrameCanvas, RGBMatrixOptions) and [here](rgbmatrix/graphics.pyx) (graphics). The underlying implementation's ground truth documentation may be found [here](../../include), specifically for [RGBMatrix, RGBMatrixOptions, and FrameCanvas](../../include/led-matrix.h), [Canvas](../../include/canvas.h) (base class of RGBMatrix), and [graphics methods and Font](../../include/graphics.h).
+
+### User
+
+As noted in the Performance section above, Python programs not run as `root` will not be as high-performance as those run as `root`. When running as `root`, be aware of a potentially-unexpected behavior: to reduce the security attack surface, initializing an RGBMatrix as `root` changes the user from `root` to `daemon` (see [#1170](https://github.com/hzeller/rpi-rgb-led-matrix/issues/1170) for more information) by default. This means, for instance, that some file operations possible before initializing the RGBMatrix will not be possible after initialization. To disable this behavior, set `drop_privileges=False` in RGBMatrixOptions, but be aware that doing so will reduce security.
\ No newline at end of file
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/Makefile b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/Makefile
new file mode 100644
index 0000000..8ebbecb
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/Makefile
@@ -0,0 +1,15 @@
+# The *.cpp files are included in the distribution; this is only needed when
+# working on the pyx files.
+#
+# Please check in modified *.cpp files with distribution to not require cython
+# to be installed on the users' machine.
+# for python3: make PYTHON=$(which python3) CYTHON=$(which cython3)
+CYTHON ?= cython
+
+all : core.cpp graphics.cpp
+
+%.cpp : %.pyx
+ $(CYTHON) --cplus -o $@ $^
+
+clean:
+ rm -rf core.cpp graphics.cpp
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/__init__.py b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/__init__.py
new file mode 100755
index 0000000..99ca3d0
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+from __future__ import absolute_import
+
+__version__ = "0.0.1"
+__author__ = "Christoph Friedrich "
+
+from .core import RGBMatrix, FrameCanvas, RGBMatrixOptions
diff --git a/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/core.cpp b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/core.cpp
new file mode 100644
index 0000000..3fef0f1
--- /dev/null
+++ b/go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix/bindings/python/rgbmatrix/core.cpp
@@ -0,0 +1,12857 @@
+/* Generated by Cython 0.29.19 */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#ifndef Py_PYTHON_H
+ #error Python headers needed to compile C extensions, please install development version of Python.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+ #error Cython requires Python 2.6+ or Python 3.3+.
+#else
+#define CYTHON_ABI "0_29_19"
+#define CYTHON_HEX_VERSION 0x001D13F0
+#define CYTHON_FUTURE_DIVISION 0
+#include
+#ifndef offsetof
+ #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+ #ifndef __stdcall
+ #define __stdcall
+ #endif
+ #ifndef __cdecl
+ #define __cdecl
+ #endif
+ #ifndef __fastcall
+ #define __fastcall
+ #endif
+#endif
+#ifndef DL_IMPORT
+ #define DL_IMPORT(t) t
+#endif
+#ifndef DL_EXPORT
+ #define DL_EXPORT(t) t
+#endif
+#define __PYX_COMMA ,
+#ifndef HAVE_LONG_LONG
+ #if PY_VERSION_HEX >= 0x02070000
+ #define HAVE_LONG_LONG
+ #endif
+#endif
+#ifndef PY_LONG_LONG
+ #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef Py_HUGE_VAL
+ #define Py_HUGE_VAL HUGE_VAL
+#endif
+#ifdef PYPY_VERSION
+ #define CYTHON_COMPILING_IN_PYPY 1
+ #define CYTHON_COMPILING_IN_PYSTON 0
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #undef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 0
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #if PY_VERSION_HEX < 0x03050000
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #undef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 1
+ #undef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 0
+ #undef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 0
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+ #undef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 0
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+#elif defined(PYSTON_VERSION)
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_PYSTON 1
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #ifndef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #ifndef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 1
+ #endif
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #ifndef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 1
+ #endif
+ #ifndef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 1
+ #endif
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+ #undef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 0
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+#else
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_PYSTON 0
+ #define CYTHON_COMPILING_IN_CPYTHON 1
+ #ifndef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 1
+ #endif
+ #if PY_VERSION_HEX < 0x02070000
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
+ #define CYTHON_USE_PYTYPE_LOOKUP 1
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #if PY_VERSION_HEX < 0x02070000
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+ #define CYTHON_USE_PYLONG_INTERNALS 1
+ #endif
+ #ifndef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 1
+ #endif
+ #ifndef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 1
+ #endif
+ #if PY_VERSION_HEX < 0x030300F0
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #elif !defined(CYTHON_USE_UNICODE_WRITER)
+ #define CYTHON_USE_UNICODE_WRITER 1
+ #endif
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #ifndef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 1
+ #endif
+ #ifndef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 1
+ #endif
+ #ifndef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 1
+ #endif
+ #ifndef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 1
+ #endif
+ #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
+ #endif
+ #ifndef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
+ #endif
+ #ifndef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+ #endif
+ #ifndef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
+ #endif
+#endif
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
+#endif
+#if CYTHON_USE_PYLONG_INTERNALS
+ #include "longintrepr.h"
+ #undef SHIFT
+ #undef BASE
+ #undef MASK
+ #ifdef SIZEOF_VOID_P
+ enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
+ #endif
+#endif
+#ifndef __has_attribute
+ #define __has_attribute(x) 0
+#endif
+#ifndef __has_cpp_attribute
+ #define __has_cpp_attribute(x) 0
+#endif
+#ifndef CYTHON_RESTRICT
+ #if defined(__GNUC__)
+ #define CYTHON_RESTRICT __restrict__
+ #elif defined(_MSC_VER) && _MSC_VER >= 1400
+ #define CYTHON_RESTRICT __restrict
+ #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define CYTHON_RESTRICT restrict
+ #else
+ #define CYTHON_RESTRICT
+ #endif
+#endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+# define CYTHON_UNUSED
+# endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+# define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+# define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+# if defined(__cplusplus)
+ template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+# else
+# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+# endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+# define CYTHON_NCP_UNUSED
+# else
+# define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+#ifdef _MSC_VER
+ #ifndef _MSC_STDINT_H_
+ #if _MSC_VER < 1300
+ typedef unsigned char uint8_t;
+ typedef unsigned int uint32_t;
+ #else
+ typedef unsigned __int8 uint8_t;
+ typedef unsigned __int32 uint32_t;
+ #endif
+ #endif
+#else
+ #include
+#endif
+#ifndef CYTHON_FALLTHROUGH
+ #if defined(__cplusplus) && __cplusplus >= 201103L
+ #if __has_cpp_attribute(fallthrough)
+ #define CYTHON_FALLTHROUGH [[fallthrough]]
+ #elif __has_cpp_attribute(clang::fallthrough)
+ #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+ #elif __has_cpp_attribute(gnu::fallthrough)
+ #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
+ #endif
+ #endif
+ #ifndef CYTHON_FALLTHROUGH
+ #if __has_attribute(fallthrough)
+ #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+ #else
+ #define CYTHON_FALLTHROUGH
+ #endif
+ #endif
+ #if defined(__clang__ ) && defined(__apple_build_version__)
+ #if __apple_build_version__ < 7000000
+ #undef CYTHON_FALLTHROUGH
+ #define CYTHON_FALLTHROUGH
+ #endif
+ #endif
+#endif
+
+#ifndef __cplusplus
+ #error "Cython files generated with the C++ option must be compiled with a C++ compiler."
+#endif
+#ifndef CYTHON_INLINE
+ #if defined(__clang__)
+ #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+ #else
+ #define CYTHON_INLINE inline
+ #endif
+#endif
+template
+void __Pyx_call_destructor(T& x) {
+ x.~T();
+}
+template
+class __Pyx_FakeReference {
+ public:
+ __Pyx_FakeReference() : ptr(NULL) { }
+ __Pyx_FakeReference(const T& ref) : ptr(const_cast(&ref)) { }
+ T *operator->() { return ptr; }
+ T *operator&() { return ptr; }
+ operator T&() { return *ptr; }
+ template bool operator ==(U other) { return *ptr == other; }
+ template bool operator !=(U other) { return *ptr != other; }
+ private:
+ T *ptr;
+};
+
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+ #define Py_OptimizeFlag 0
+#endif
+#define __PYX_BUILD_PY_SSIZE_T "n"
+#define CYTHON_FORMAT_SSIZE_T "z"
+#if PY_MAJOR_VERSION < 3
+ #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+ #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+ #define __Pyx_DefaultClassType PyClass_Type
+#else
+ #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
+ #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#else
+ #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#endif
+ #define __Pyx_DefaultClassType PyType_Type
+#endif
+#ifndef Py_TPFLAGS_CHECKTYPES
+ #define Py_TPFLAGS_CHECKTYPES 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_INDEX
+ #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
+ #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_FINALIZE
+ #define Py_TPFLAGS_HAVE_FINALIZE 0
+#endif
+#ifndef METH_STACKLESS
+ #define METH_STACKLESS 0
+#endif
+#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
+ #ifndef METH_FASTCALL
+ #define METH_FASTCALL 0x80
+ #endif
+ typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
+ typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
+ Py_ssize_t nargs, PyObject *kwnames);
+#else
+ #define __Pyx_PyCFunctionFast _PyCFunctionFast
+ #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+ ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+ #define PyObject_Malloc(s) PyMem_Malloc(s)
+ #define PyObject_Free(p) PyMem_Free(p)
+ #define PyObject_Realloc(p) PyMem_Realloc(p)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1
+ #define PyMem_RawMalloc(n) PyMem_Malloc(n)
+ #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n)
+ #define PyMem_RawFree(p) PyMem_Free(p)
+#endif
+#if CYTHON_COMPILING_IN_PYSTON
+ #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co)
+ #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+ #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
+ #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno)
+#endif
+#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
+ #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#elif PY_VERSION_HEX >= 0x03060000
+ #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
+#elif PY_VERSION_HEX >= 0x03000000
+ #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#else
+ #define __Pyx_PyThreadState_Current _PyThreadState_Current
+#endif
+#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
+#include "pythread.h"
+#define Py_tss_NEEDS_INIT 0
+typedef int Py_tss_t;
+static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
+ *key = PyThread_create_key();
+ return 0;
+}
+static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
+ Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
+ *key = Py_tss_NEEDS_INIT;
+ return key;
+}
+static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
+ PyObject_Free(key);
+}
+static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
+ return *key != Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
+ PyThread_delete_key(*key);
+ *key = Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
+ return PyThread_set_key_value(*key, value);
+}
+static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
+ return PyThread_get_key_value(*key);
+}
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
+#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
+#else
+#define __Pyx_PyDict_NewPresized(n) PyDict_New()
+#endif
+#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
+ #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y)
+#else
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y)
+ #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS
+#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
+#else
+#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name)
+#endif
+#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+ #define CYTHON_PEP393_ENABLED 1
+ #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\
+ 0 : _PyUnicode_Ready((PyObject *)(op)))
+ #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u)
+ #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+ #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u)
+ #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u)
+ #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
+ #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
+ #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch)
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+#else
+ #define CYTHON_PEP393_ENABLED 0
+ #define PyUnicode_1BYTE_KIND 1
+ #define PyUnicode_2BYTE_KIND 2
+ #define PyUnicode_4BYTE_KIND 4
+ #define __Pyx_PyUnicode_READY(op) (0)
+ #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
+ #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+ #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
+ #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE))
+ #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u))
+ #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+ #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u))
+#endif
+#if CYTHON_COMPILING_IN_PYPY
+ #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b)
+ #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b)
+#else
+ #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b)
+ #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
+ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
+ #define PyUnicode_Contains(u, s) PySequence_Contains(u, s)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+ #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
+ #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt)
+#endif
+#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b)
+#else
+ #define __Pyx_PyString_Format(a, b) PyString_Format(a, b)
+#endif
+#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+ #define PyObject_ASCII(o) PyObject_Repr(o)
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyBaseString_Type PyUnicode_Type
+ #define PyStringObject PyUnicodeObject
+ #define PyString_Type PyUnicode_Type
+ #define PyString_Check PyUnicode_Check
+ #define PyString_CheckExact PyUnicode_CheckExact
+#ifndef PyObject_Unicode
+ #define PyObject_Unicode PyObject_Str
+#endif
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
+ #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
+#else
+ #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
+ #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
+#endif
+#ifndef PySet_CheckExact
+ #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type)
+#endif
+#if CYTHON_ASSUME_SAFE_MACROS
+ #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq)
+#else
+ #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq)
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyIntObject PyLongObject
+ #define PyInt_Type PyLong_Type
+ #define PyInt_Check(op) PyLong_Check(op)
+ #define PyInt_CheckExact(op) PyLong_CheckExact(op)
+ #define PyInt_FromString PyLong_FromString
+ #define PyInt_FromUnicode PyLong_FromUnicode
+ #define PyInt_FromLong PyLong_FromLong
+ #define PyInt_FromSize_t PyLong_FromSize_t
+ #define PyInt_FromSsize_t PyLong_FromSsize_t
+ #define PyInt_AsLong PyLong_AsLong
+ #define PyInt_AS_LONG PyLong_AS_LONG
+ #define PyInt_AsSsize_t PyLong_AsSsize_t
+ #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
+ #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+ #define PyNumber_Int PyNumber_Long
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyBoolObject PyLongObject
+#endif
+#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+ #ifndef PyUnicode_InternFromString
+ #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+ #endif
+#endif
+#if PY_VERSION_HEX < 0x030200A4
+ typedef long Py_hash_t;
+ #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+ #define __Pyx_PyInt_AsHash_t PyInt_AsLong
+#else
+ #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+ #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func))
+#else
+ #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
+#endif
+#if CYTHON_USE_ASYNC_SLOTS
+ #if PY_VERSION_HEX >= 0x030500B1
+ #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+ #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+ #else
+ #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+ #endif
+#else
+ #define __Pyx_PyType_AsAsync(obj) NULL
+#endif
+#ifndef __Pyx_PyAsyncMethodsStruct
+ typedef struct {
+ unaryfunc am_await;
+ unaryfunc am_aiter;
+ unaryfunc am_anext;
+ } __Pyx_PyAsyncMethodsStruct;
+#endif
+
+#if defined(WIN32) || defined(MS_WINDOWS)
+ #define _USE_MATH_DEFINES
+#endif
+#include
+#ifdef NAN
+#define __PYX_NAN() ((float) NAN)
+#else
+static CYTHON_INLINE float __PYX_NAN() {
+ float value;
+ memset(&value, 0xFF, sizeof(value));
+ return value;
+}
+#endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
+
+#define __PYX_MARK_ERR_POS(f_index, lineno) \
+ { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; }
+#define __PYX_ERR(f_index, lineno, Ln_error) \
+ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }
+
+#ifndef __PYX_EXTERN_C
+ #ifdef __cplusplus
+ #define __PYX_EXTERN_C extern "C"
+ #else
+ #define __PYX_EXTERN_C extern
+ #endif
+#endif
+
+#define __PYX_HAVE__rgbmatrix__core
+#define __PYX_HAVE_API__rgbmatrix__core
+/* Early includes */
+#include
+#include "canvas.h"
+#include "ios"
+#include "new"
+#include "stdexcept"
+#include "typeinfo"
+#include "led-matrix.h"
+#include "graphics.h"
+#ifdef _OPENMP
+#include
+#endif /* _OPENMP */
+
+#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
+#define CYTHON_WITHOUT_ASSERTIONS
+#endif
+
+typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
+ const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
+
+#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
+#define __PYX_DEFAULT_STRING_ENCODING ""
+#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
+#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#define __Pyx_uchar_cast(c) ((unsigned char)c)
+#define __Pyx_long_cast(x) ((long)x)
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\
+ (sizeof(type) < sizeof(Py_ssize_t)) ||\
+ (sizeof(type) > sizeof(Py_ssize_t) &&\
+ likely(v < (type)PY_SSIZE_T_MAX ||\
+ v == (type)PY_SSIZE_T_MAX) &&\
+ (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
+ v == (type)PY_SSIZE_T_MIN))) ||\
+ (sizeof(type) == sizeof(Py_ssize_t) &&\
+ (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
+ v == (type)PY_SSIZE_T_MAX))) )
+static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
+ return (size_t) i < (size_t) limit;
+}
+#if defined (__cplusplus) && __cplusplus >= 201103L
+ #include
+ #define __Pyx_sst_abs(value) std::abs(value)
+#elif SIZEOF_INT >= SIZEOF_SIZE_T
+ #define __Pyx_sst_abs(value) abs(value)
+#elif SIZEOF_LONG >= SIZEOF_SIZE_T
+ #define __Pyx_sst_abs(value) labs(value)
+#elif defined (_MSC_VER)
+ #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define __Pyx_sst_abs(value) llabs(value)
+#elif defined (__GNUC__)
+ #define __Pyx_sst_abs(value) __builtin_llabs(value)
+#else
+ #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
+#endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
+#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
+#define __Pyx_PyBytes_FromString PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
+#if PY_MAJOR_VERSION < 3
+ #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString
+ #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#else
+ #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString
+ #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
+#endif
+#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
+ const Py_UNICODE *u_end = u;
+ while (*u_end++) ;
+ return (size_t)(u_end - u - 1);
+}
+#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
+#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
+#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode
+#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
+#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
+static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
+#define __Pyx_PySequence_Tuple(obj)\
+ (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+#if CYTHON_ASSUME_SAFE_MACROS
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+#else
+#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+#endif
+#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+#else
+#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+#endif
+#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+static int __Pyx_sys_getdefaultencoding_not_ascii;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+ PyObject* sys;
+ PyObject* default_encoding = NULL;
+ PyObject* ascii_chars_u = NULL;
+ PyObject* ascii_chars_b = NULL;
+ const char* default_encoding_c;
+ sys = PyImport_ImportModule("sys");
+ if (!sys) goto bad;
+ default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
+ Py_DECREF(sys);
+ if (!default_encoding) goto bad;
+ default_encoding_c = PyBytes_AsString(default_encoding);
+ if (!default_encoding_c) goto bad;
+ if (strcmp(default_encoding_c, "ascii") == 0) {
+ __Pyx_sys_getdefaultencoding_not_ascii = 0;
+ } else {
+ char ascii_chars[128];
+ int c;
+ for (c = 0; c < 128; c++) {
+ ascii_chars[c] = c;
+ }
+ __Pyx_sys_getdefaultencoding_not_ascii = 1;
+ ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
+ if (!ascii_chars_u) goto bad;
+ ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
+ if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
+ PyErr_Format(
+ PyExc_ValueError,
+ "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
+ default_encoding_c);
+ goto bad;
+ }
+ Py_DECREF(ascii_chars_u);
+ Py_DECREF(ascii_chars_b);
+ }
+ Py_DECREF(default_encoding);
+ return 0;
+bad:
+ Py_XDECREF(default_encoding);
+ Py_XDECREF(ascii_chars_u);
+ Py_XDECREF(ascii_chars_b);
+ return -1;
+}
+#endif
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
+#else
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+static char* __PYX_DEFAULT_STRING_ENCODING;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+ PyObject* sys;
+ PyObject* default_encoding = NULL;
+ char* default_encoding_c;
+ sys = PyImport_ImportModule("sys");
+ if (!sys) goto bad;
+ default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+ Py_DECREF(sys);
+ if (!default_encoding) goto bad;
+ default_encoding_c = PyBytes_AsString(default_encoding);
+ if (!default_encoding_c) goto bad;
+ __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
+ if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
+ strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
+ Py_DECREF(default_encoding);
+ return 0;
+bad:
+ Py_XDECREF(default_encoding);
+ return -1;
+}
+#endif
+#endif
+
+
+/* Test for GCC > 2.95 */
+#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+ #define likely(x) __builtin_expect(!!(x), 1)
+ #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* !__GNUC__ or GCC < 2.95 */
+ #define likely(x) (x)
+ #define unlikely(x) (x)
+#endif /* __GNUC__ */
+static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
+
+static PyObject *__pyx_m = NULL;
+static PyObject *__pyx_d;
+static PyObject *__pyx_b;
+static PyObject *__pyx_cython_runtime = NULL;
+static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
+static PyObject *__pyx_empty_unicode;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+
+
+static const char *__pyx_f[] = {
+ "core.pyx",
+ "stringsource",
+};
+
+/*--- Type declarations ---*/
+struct __pyx_obj_9rgbmatrix_4core_Canvas;
+struct __pyx_obj_9rgbmatrix_4core_FrameCanvas;
+struct __pyx_obj_9rgbmatrix_4core_RGBMatrix;
+struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions;
+
+/* "rgbmatrix/core.pxd":3
+ * cimport cppinc
+ *
+ * cdef class Canvas: # <<<<<<<<<<<<<<
+ * cdef cppinc.Canvas *__getCanvas(self) except +
+ *
+ */
+struct __pyx_obj_9rgbmatrix_4core_Canvas {
+ PyObject_HEAD
+ struct __pyx_vtabstruct_9rgbmatrix_4core_Canvas *__pyx_vtab;
+};
+
+
+/* "rgbmatrix/core.pxd":6
+ * cdef cppinc.Canvas *__getCanvas(self) except +
+ *
+ * cdef class FrameCanvas(Canvas): # <<<<<<<<<<<<<<
+ * cdef cppinc.FrameCanvas *__canvas
+ *
+ */
+struct __pyx_obj_9rgbmatrix_4core_FrameCanvas {
+ struct __pyx_obj_9rgbmatrix_4core_Canvas __pyx_base;
+ rgb_matrix::FrameCanvas *__pyx___canvas;
+};
+
+
+/* "rgbmatrix/core.pxd":9
+ * cdef cppinc.FrameCanvas *__canvas
+ *
+ * cdef class RGBMatrix(Canvas): # <<<<<<<<<<<<<<
+ * cdef cppinc.RGBMatrix *__matrix
+ *
+ */
+struct __pyx_obj_9rgbmatrix_4core_RGBMatrix {
+ struct __pyx_obj_9rgbmatrix_4core_Canvas __pyx_base;
+ rgb_matrix::RGBMatrix *__pyx___matrix;
+};
+
+
+/* "rgbmatrix/core.pxd":12
+ * cdef cppinc.RGBMatrix *__matrix
+ *
+ * cdef class RGBMatrixOptions: # <<<<<<<<<<<<<<
+ * cdef cppinc.Options __options
+ * cdef cppinc.RuntimeOptions __runtime_options
+ */
+struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions {
+ PyObject_HEAD
+ struct rgb_matrix::RGBMatrix::Options __pyx___options;
+ struct rgb_matrix::RuntimeOptions __pyx___runtime_options;
+ PyObject *__pyx___py_encoded_hardware_mapping;
+ PyObject *__pyx___py_encoded_led_rgb_sequence;
+ PyObject *__pyx___py_encoded_pixel_mapper_config;
+ PyObject *__pyx___py_encoded_panel_type;
+};
+
+
+
+/* "rgbmatrix/core.pyx":8
+ * import cython
+ *
+ * cdef class Canvas: # <<<<<<<<<<<<<<
+ * cdef cppinc.Canvas* __getCanvas(self) except +:
+ * raise Exception("Not implemented")
+ */
+
+struct __pyx_vtabstruct_9rgbmatrix_4core_Canvas {
+ rgb_matrix::Canvas *(*__pyx___getCanvas)(struct __pyx_obj_9rgbmatrix_4core_Canvas *);
+};
+static struct __pyx_vtabstruct_9rgbmatrix_4core_Canvas *__pyx_vtabptr_9rgbmatrix_4core_Canvas;
+
+
+/* "rgbmatrix/core.pyx":56
+ * my_canvas.SetPixel(xstart+col, ystart+row, r, g, b)
+ *
+ * cdef class FrameCanvas(Canvas): # <<<<<<<<<<<<<<
+ * def __dealloc__(self):
+ * if self.__canvas != NULL:
+ */
+
+struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas {
+ struct __pyx_vtabstruct_9rgbmatrix_4core_Canvas __pyx_base;
+ rgb_matrix::Canvas *(*__pyx___getCanvas)(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *);
+};
+static struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *__pyx_vtabptr_9rgbmatrix_4core_FrameCanvas;
+
+
+/* "rgbmatrix/core.pyx":196
+ * def __set__(self, uint8_t value): self.__runtime_options.drop_privileges = value
+ *
+ * cdef class RGBMatrix(Canvas): # <<<<<<<<<<<<<<
+ * def __cinit__(self, int rows = 0, int chains = 0, int parallel = 0,
+ * RGBMatrixOptions options = None):
+ */
+
+struct __pyx_vtabstruct_9rgbmatrix_4core_RGBMatrix {
+ struct __pyx_vtabstruct_9rgbmatrix_4core_Canvas __pyx_base;
+ rgb_matrix::Canvas *(*__pyx___getCanvas)(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *);
+};
+static struct __pyx_vtabstruct_9rgbmatrix_4core_RGBMatrix *__pyx_vtabptr_9rgbmatrix_4core_RGBMatrix;
+
+/* --- Runtime support code (head) --- */
+/* Refnanny.proto */
+#ifndef CYTHON_REFNANNY
+ #define CYTHON_REFNANNY 0
+#endif
+#if CYTHON_REFNANNY
+ typedef struct {
+ void (*INCREF)(void*, PyObject*, int);
+ void (*DECREF)(void*, PyObject*, int);
+ void (*GOTREF)(void*, PyObject*, int);
+ void (*GIVEREF)(void*, PyObject*, int);
+ void* (*SetupContext)(const char*, int, const char*);
+ void (*FinishContext)(void**);
+ } __Pyx_RefNannyAPIStruct;
+ static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+ static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
+ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+#ifdef WITH_THREAD
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+ if (acquire_gil) {\
+ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+ PyGILState_Release(__pyx_gilstate_save);\
+ } else {\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+ }
+#else
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+#endif
+ #define __Pyx_RefNannyFinishContext()\
+ __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+ #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
+ #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
+ #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
+ #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
+#else
+ #define __Pyx_RefNannyDeclarations
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)
+ #define __Pyx_RefNannyFinishContext()
+ #define __Pyx_INCREF(r) Py_INCREF(r)
+ #define __Pyx_DECREF(r) Py_DECREF(r)
+ #define __Pyx_GOTREF(r)
+ #define __Pyx_GIVEREF(r)
+ #define __Pyx_XINCREF(r) Py_XINCREF(r)
+ #define __Pyx_XDECREF(r) Py_XDECREF(r)
+ #define __Pyx_XGOTREF(r)
+ #define __Pyx_XGIVEREF(r)
+#endif
+#define __Pyx_XDECREF_SET(r, v) do {\
+ PyObject *tmp = (PyObject *) r;\
+ r = v; __Pyx_XDECREF(tmp);\
+ } while (0)
+#define __Pyx_DECREF_SET(r, v) do {\
+ PyObject *tmp = (PyObject *) r;\
+ r = v; __Pyx_DECREF(tmp);\
+ } while (0)
+#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
+
+/* PyObjectGetAttrStr.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
+#endif
+
+/* GetBuiltinName.proto */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name);
+
+/* PyObjectCall.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
+#else
+#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+#endif
+
+/* PyThreadStateGet.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate;
+#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current;
+#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type
+#else
+#define __Pyx_PyThreadState_declare
+#define __Pyx_PyThreadState_assign
+#define __Pyx_PyErr_Occurred() PyErr_Occurred()
+#endif
+
+/* PyErrFetchRestore.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
+#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
+#else
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#endif
+#else
+#define __Pyx_PyErr_Clear() PyErr_Clear()
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb)
+#endif
+
+/* RaiseException.proto */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
+
+/* RaiseDoubleKeywords.proto */
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
+
+/* ParseKeywords.proto */
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
+ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
+ const char* function_name);
+
+/* RaiseArgTupleInvalid.proto */
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+ Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
+
+/* IncludeStringH.proto */
+#include
+
+/* BytesEquals.proto */
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* UnicodeEquals.proto */
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* StrEquals.proto */
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
+#else
+#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
+#endif
+
+/* RaiseTooManyValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+
+/* RaiseNeedMoreValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+/* IterFinish.proto */
+static CYTHON_INLINE int __Pyx_IterFinish(void);
+
+/* UnpackItemEndCheck.proto */
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+ __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#define __Pyx_BUILD_ASSERT_EXPR(cond)\
+ (sizeof(char [1 - 2*!(cond)]) - 1)
+#ifndef Py_MEMBER_SIZE
+#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
+#endif
+ static size_t __pyx_pyframe_localsplus_offset = 0;
+ #include "frameobject.h"
+ #define __Pxy_PyFrame_Initialize_Offsets()\
+ ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
+ (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
+ #define __Pyx_PyFrame_GetLocalsplus(frame)\
+ (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif
+
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL)
+#endif
+
+/* PyObjectCallMethO.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
+#endif
+
+/* PyObjectCallNoArg.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
+#else
+#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
+#endif
+
+/* PyObjectCallOneArg.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
+
+/* GetItemInt.proto */
+#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
+ (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
+ __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+ (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+ int wraparound, int boundscheck);
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+ (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+ int wraparound, int boundscheck);
+static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+ int is_list, int wraparound, int boundscheck);
+
+/* ObjectGetItem.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key);
+#else
+#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key)
+#endif
+
+/* DictGetItem.proto */
+#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
+static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key);
+#define __Pyx_PyObject_Dict_GetItem(obj, name)\
+ (likely(PyDict_CheckExact(obj)) ?\
+ __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name))
+#else
+#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
+#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name)
+#endif
+
+/* PyErrExceptionMatches.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err)
+#endif
+
+/* GetAttr.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
+
+/* GetAttr3.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
+
+/* PyDictVersioning.proto */
+#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
+#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1)
+#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
+ (version_var) = __PYX_GET_DICT_VERSION(dict);\
+ (cache_var) = (value);
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
+ static PY_UINT64_T __pyx_dict_version = 0;\
+ static PyObject *__pyx_dict_cached_value = NULL;\
+ if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
+ (VAR) = __pyx_dict_cached_value;\
+ } else {\
+ (VAR) = __pyx_dict_cached_value = (LOOKUP);\
+ __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
+ }\
+}
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
+static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
+#else
+#define __PYX_GET_DICT_VERSION(dict) (0)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP);
+#endif
+
+/* GetModuleGlobalName.proto */
+#if CYTHON_USE_DICT_VERSIONS
+#define __Pyx_GetModuleGlobalName(var, name) {\
+ static PY_UINT64_T __pyx_dict_version = 0;\
+ static PyObject *__pyx_dict_cached_value = NULL;\
+ (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
+ (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
+ __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+}
+#define __Pyx_GetModuleGlobalNameUncached(var, name) {\
+ PY_UINT64_T __pyx_dict_version;\
+ PyObject *__pyx_dict_cached_value;\
+ (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+}
+static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
+#else
+#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name)
+#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name)
+static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
+#endif
+
+/* KeywordStringCheck.proto */
+static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed);
+
+/* PyObjectCall2Args.proto */
+static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
+
+/* ArgTypeTest.proto */
+#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
+ ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\
+ __Pyx__ArgTypeTest(obj, type, name, exact))
+static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
+
+/* PyObjectSetAttrStr.proto */
+#if CYTHON_USE_TYPE_SLOTS
+#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL)
+static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value);
+#else
+#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n)
+#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
+#endif
+
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+/* ImportFrom.proto */
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
+
+/* HasAttr.proto */
+static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
+
+/* PyObject_GenericGetAttrNoDict.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
+#endif
+
+/* PyObject_GenericGetAttr.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
+#endif
+
+/* SetVTable.proto */
+static int __Pyx_SetVtable(PyObject *dict, void *vtable);
+
+/* PyObjectGetAttrStrNoError.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);
+
+/* SetupReduce.proto */
+static int __Pyx_setup_reduce(PyObject* type_obj);
+
+/* CLineInTraceback.proto */
+#ifdef CYTHON_CLINE_IN_TRACEBACK
+#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
+#else
+static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
+#endif
+
+/* CodeObjectCache.proto */
+typedef struct {
+ PyCodeObject* code_object;
+ int code_line;
+} __Pyx_CodeObjectCacheEntry;
+struct __Pyx_CodeObjectCache {
+ int count;
+ int max_count;
+ __Pyx_CodeObjectCacheEntry* entries;
+};
+static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+static PyCodeObject *__pyx_find_code_object(int code_line);
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+
+/* AddTraceback.proto */
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+ int py_line, const char *filename);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+/* CppExceptionConversion.proto */
+#ifndef __Pyx_CppExn2PyErr
+#include
+#include
+#include
+#include
+static void __Pyx_CppExn2PyErr() {
+ try {
+ if (PyErr_Occurred())
+ ; // let the latest Python exn pass through and ignore the current one
+ else
+ throw;
+ } catch (const std::bad_alloc& exn) {
+ PyErr_SetString(PyExc_MemoryError, exn.what());
+ } catch (const std::bad_cast& exn) {
+ PyErr_SetString(PyExc_TypeError, exn.what());
+ } catch (const std::bad_typeid& exn) {
+ PyErr_SetString(PyExc_TypeError, exn.what());
+ } catch (const std::domain_error& exn) {
+ PyErr_SetString(PyExc_ValueError, exn.what());
+ } catch (const std::invalid_argument& exn) {
+ PyErr_SetString(PyExc_ValueError, exn.what());
+ } catch (const std::ios_base::failure& exn) {
+ PyErr_SetString(PyExc_IOError, exn.what());
+ } catch (const std::out_of_range& exn) {
+ PyErr_SetString(PyExc_IndexError, exn.what());
+ } catch (const std::overflow_error& exn) {
+ PyErr_SetString(PyExc_OverflowError, exn.what());
+ } catch (const std::range_error& exn) {
+ PyErr_SetString(PyExc_ArithmeticError, exn.what());
+ } catch (const std::underflow_error& exn) {
+ PyErr_SetString(PyExc_ArithmeticError, exn.what());
+ } catch (const std::exception& exn) {
+ PyErr_SetString(PyExc_RuntimeError, exn.what());
+ }
+ catch (...)
+ {
+ PyErr_SetString(PyExc_RuntimeError, "Unknown exception");
+ }
+}
+#endif
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint8_t(uint8_t value);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE uint8_t __Pyx_PyInt_As_uint8_t(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
+
+/* FastTypeChecks.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
+#else
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
+#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
+#endif
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
+
+/* CheckBinaryVersion.proto */
+static int __Pyx_check_binary_version(void);
+
+/* InitStrings.proto */
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
+
+static rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_6Canvas___getCanvas(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self); /* proto*/
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_11FrameCanvas___getCanvas(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto*/
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_11FrameCanvas___getCanvas__pyx_wrap_1(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto*/
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_9RGBMatrix___getCanvas(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto*/
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_9RGBMatrix___getCanvas__pyx_wrap_1(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto*/
+
+/* Module declarations from 'libcpp' */
+
+/* Module declarations from 'libc.stdint' */
+
+/* Module declarations from 'rgbmatrix.cppinc' */
+
+/* Module declarations from 'cython' */
+
+/* Module declarations from 'rgbmatrix.core' */
+static PyTypeObject *__pyx_ptype_9rgbmatrix_4core_Canvas = 0;
+static PyTypeObject *__pyx_ptype_9rgbmatrix_4core_FrameCanvas = 0;
+static PyTypeObject *__pyx_ptype_9rgbmatrix_4core_RGBMatrix = 0;
+static PyTypeObject *__pyx_ptype_9rgbmatrix_4core_RGBMatrixOptions = 0;
+static PyObject *__pyx_f_9rgbmatrix_4core___createFrameCanvas(rgb_matrix::FrameCanvas *); /*proto*/
+static PyObject *__pyx_f_9rgbmatrix_4core___pyx_unpickle_Canvas__set_state(struct __pyx_obj_9rgbmatrix_4core_Canvas *, PyObject *); /*proto*/
+#define __Pyx_MODULE_NAME "rgbmatrix.core"
+extern int __pyx_module_is_main_rgbmatrix__core;
+int __pyx_module_is_main_rgbmatrix__core = 0;
+
+/* Implementation of 'rgbmatrix.core' */
+static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin_TypeError;
+static const char __pyx_k_x[] = "x";
+static const char __pyx_k_y[] = "y";
+static const char __pyx_k_im[] = "im";
+static const char __pyx_k_PIL[] = "PIL";
+static const char __pyx_k_RGB[] = "RGB";
+static const char __pyx_k_new[] = "__new__";
+static const char __pyx_k_red[] = "red";
+static const char __pyx_k_blue[] = "blue";
+static const char __pyx_k_dict[] = "__dict__";
+static const char __pyx_k_load[] = "load";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_mode[] = "mode";
+static const char __pyx_k_name[] = "__name__";
+static const char __pyx_k_rows[] = "rows";
+static const char __pyx_k_size[] = "size";
+static const char __pyx_k_test[] = "__test__";
+static const char __pyx_k_Image[] = "Image";
+static const char __pyx_k_green[] = "green";
+static const char __pyx_k_image[] = "image";
+static const char __pyx_k_range[] = "range";
+static const char __pyx_k_utf_8[] = "utf-8";
+static const char __pyx_k_width[] = "width";
+static const char __pyx_k_Canvas[] = "Canvas";
+static const char __pyx_k_chains[] = "chains";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_height[] = "height";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_pickle[] = "pickle";
+static const char __pyx_k_reduce[] = "__reduce__";
+static const char __pyx_k_unsafe[] = "unsafe";
+static const char __pyx_k_update[] = "update";
+static const char __pyx_k_xstart[] = "xstart";
+static const char __pyx_k_ystart[] = "ystart";
+static const char __pyx_k_image32[] = "image32";
+static const char __pyx_k_options[] = "options";
+static const char __pyx_k_SetPixel[] = "SetPixel";
+static const char __pyx_k_getstate[] = "__getstate__";
+static const char __pyx_k_offset_x[] = "offset_x";
+static const char __pyx_k_offset_y[] = "offset_y";
+static const char __pyx_k_parallel[] = "parallel";
+static const char __pyx_k_pyx_type[] = "__pyx_type";
+static const char __pyx_k_setstate[] = "__setstate__";
+static const char __pyx_k_RGBMatrix[] = "RGBMatrix";
+static const char __pyx_k_TypeError[] = "TypeError";
+static const char __pyx_k_pyx_state[] = "__pyx_state";
+static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
+static const char __pyx_k_pyx_result[] = "__pyx_result";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_FrameCanvas[] = "FrameCanvas";
+static const char __pyx_k_PickleError[] = "PickleError";
+static const char __pyx_k_unsafe_ptrs[] = "unsafe_ptrs";
+static const char __pyx_k_chain_length[] = "chain_length";
+static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
+static const char __pyx_k_stringsource[] = "stringsource";
+static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
+static const char __pyx_k_rgbmatrix_core[] = "rgbmatrix.core";
+static const char __pyx_k_Not_implemented[] = "Not implemented";
+static const char __pyx_k_SetPixelsPillow[] = "SetPixelsPillow";
+static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
+static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
+static const char __pyx_k_RGBMatrixOptions[] = "RGBMatrixOptions";
+static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
+static const char __pyx_k_pyx_unpickle_Canvas[] = "__pyx_unpickle_Canvas";
+static const char __pyx_k_Canvas_was_destroyed_or_not_init[] = "Canvas was destroyed or not initialized, you cannot use this object anymore";
+static const char __pyx_k_Currently_only_RGB_mode_is_suppo[] = "Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)";
+static const char __pyx_k_Incompatible_checksums_s_vs_0xd4[] = "Incompatible checksums (%s vs 0xd41d8cd = ())";
+static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
+static const char __pyx_k_self___canvas_cannot_be_converte[] = "self.__canvas cannot be converted to a Python object for pickling";
+static PyObject *__pyx_n_s_Canvas;
+static PyObject *__pyx_kp_s_Canvas_was_destroyed_or_not_init;
+static PyObject *__pyx_kp_s_Currently_only_RGB_mode_is_suppo;
+static PyObject *__pyx_n_s_FrameCanvas;
+static PyObject *__pyx_n_s_Image;
+static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xd4;
+static PyObject *__pyx_kp_s_Not_implemented;
+static PyObject *__pyx_n_s_PIL;
+static PyObject *__pyx_n_s_PickleError;
+static PyObject *__pyx_n_s_RGB;
+static PyObject *__pyx_n_s_RGBMatrix;
+static PyObject *__pyx_n_s_RGBMatrixOptions;
+static PyObject *__pyx_n_s_SetPixel;
+static PyObject *__pyx_n_s_SetPixelsPillow;
+static PyObject *__pyx_n_s_TypeError;
+static PyObject *__pyx_n_s_blue;
+static PyObject *__pyx_n_s_chain_length;
+static PyObject *__pyx_n_s_chains;
+static PyObject *__pyx_n_s_cline_in_traceback;
+static PyObject *__pyx_n_s_dict;
+static PyObject *__pyx_n_s_encode;
+static PyObject *__pyx_n_s_getstate;
+static PyObject *__pyx_n_s_green;
+static PyObject *__pyx_n_s_height;
+static PyObject *__pyx_n_s_im;
+static PyObject *__pyx_n_s_image;
+static PyObject *__pyx_n_s_image32;
+static PyObject *__pyx_n_s_import;
+static PyObject *__pyx_n_s_load;
+static PyObject *__pyx_n_s_main;
+static PyObject *__pyx_n_s_mode;
+static PyObject *__pyx_n_s_name;
+static PyObject *__pyx_n_s_new;
+static PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
+static PyObject *__pyx_n_s_offset_x;
+static PyObject *__pyx_n_s_offset_y;
+static PyObject *__pyx_n_s_options;
+static PyObject *__pyx_n_s_parallel;
+static PyObject *__pyx_n_s_pickle;
+static PyObject *__pyx_n_s_pyx_PickleError;
+static PyObject *__pyx_n_s_pyx_checksum;
+static PyObject *__pyx_n_s_pyx_result;
+static PyObject *__pyx_n_s_pyx_state;
+static PyObject *__pyx_n_s_pyx_type;
+static PyObject *__pyx_n_s_pyx_unpickle_Canvas;
+static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_range;
+static PyObject *__pyx_n_s_red;
+static PyObject *__pyx_n_s_reduce;
+static PyObject *__pyx_n_s_reduce_cython;
+static PyObject *__pyx_n_s_reduce_ex;
+static PyObject *__pyx_n_s_rgbmatrix_core;
+static PyObject *__pyx_n_s_rows;
+static PyObject *__pyx_kp_s_self___canvas_cannot_be_converte;
+static PyObject *__pyx_n_s_setstate;
+static PyObject *__pyx_n_s_setstate_cython;
+static PyObject *__pyx_n_s_size;
+static PyObject *__pyx_kp_s_stringsource;
+static PyObject *__pyx_n_s_test;
+static PyObject *__pyx_n_s_unsafe;
+static PyObject *__pyx_n_s_unsafe_ptrs;
+static PyObject *__pyx_n_s_update;
+static PyObject *__pyx_kp_s_utf_8;
+static PyObject *__pyx_n_s_width;
+static PyObject *__pyx_n_s_x;
+static PyObject *__pyx_n_s_xstart;
+static PyObject *__pyx_n_s_y;
+static PyObject *__pyx_n_s_ystart;
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_SetImage(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self, PyObject *__pyx_v_image, int __pyx_v_offset_x, int __pyx_v_offset_y, PyObject *__pyx_v_unsafe); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_2SetPixelsPillow(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self, int __pyx_v_xstart, int __pyx_v_ystart, int __pyx_v_width, int __pyx_v_height, PyObject *__pyx_v_image); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_4__reduce_cython__(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_6__setstate_cython__(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
+static void __pyx_pf_9rgbmatrix_4core_11FrameCanvas___dealloc__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_2Fill(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_4Clear(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_6SetPixel(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, int __pyx_v_x, int __pyx_v_y, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_5width___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_6height___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_7pwmBits___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_11FrameCanvas_7pwmBits_2__set__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, PyObject *__pyx_v_pwmBits); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_10brightness___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_11FrameCanvas_10brightness_2__set__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, PyObject *__pyx_v_val); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions___cinit__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4rows___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4rows_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4cols___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4cols_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8parallel___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8parallel_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint32_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10brightness___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10brightness_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_6daemon___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_6daemon_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix___cinit__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, int __pyx_v_rows, int __pyx_v_chains, int __pyx_v_parallel, struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_options); /* proto */
+static void __pyx_pf_9rgbmatrix_4core_9RGBMatrix_2__dealloc__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_4Fill(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_6SetPixel(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, int __pyx_v_x, int __pyx_v_y, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_8Clear(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_10CreateFrameCanvas(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_12SwapOnVSync(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_newFrame); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, PyObject *__pyx_v_luminanceCorrect); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_7pwmBits___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix_7pwmBits_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, PyObject *__pyx_v_pwmBits); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_10brightness___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix_10brightness_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, PyObject *__pyx_v_brightness); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_6height___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_5width___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_14__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_16__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_pf_9rgbmatrix_4core___pyx_unpickle_Canvas(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_tp_new_9rgbmatrix_4core_Canvas(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_9rgbmatrix_4core_FrameCanvas(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_9rgbmatrix_4core_RGBMatrix(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_9rgbmatrix_4core_RGBMatrixOptions(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_int_222419149;
+static PyObject *__pyx_tuple_;
+static PyObject *__pyx_tuple__2;
+static PyObject *__pyx_tuple__3;
+static PyObject *__pyx_tuple__4;
+static PyObject *__pyx_tuple__5;
+static PyObject *__pyx_tuple__6;
+static PyObject *__pyx_tuple__7;
+static PyObject *__pyx_tuple__8;
+static PyObject *__pyx_tuple__9;
+static PyObject *__pyx_tuple__10;
+static PyObject *__pyx_codeobj__11;
+/* Late includes */
+
+/* "rgbmatrix/core.pyx":9
+ *
+ * cdef class Canvas:
+ * cdef cppinc.Canvas* __getCanvas(self) except +: # <<<<<<<<<<<<<<
+ * raise Exception("Not implemented")
+ *
+ */
+
+static rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_6Canvas___getCanvas(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self) {
+ rgb_matrix::Canvas *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getCanvas", 0);
+
+ /* "rgbmatrix/core.pyx":10
+ * cdef class Canvas:
+ * cdef cppinc.Canvas* __getCanvas(self) except +:
+ * raise Exception("Not implemented") # <<<<<<<<<<<<<<
+ *
+ * def SetImage(self, image, int offset_x = 0, int offset_y = 0, unsafe=True):
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(0, 10, __pyx_L1_error)
+
+ /* "rgbmatrix/core.pyx":9
+ *
+ * cdef class Canvas:
+ * cdef cppinc.Canvas* __getCanvas(self) except +: # <<<<<<<<<<<<<<
+ * raise Exception("Not implemented")
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.Canvas.__getCanvas", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":12
+ * raise Exception("Not implemented")
+ *
+ * def SetImage(self, image, int offset_x = 0, int offset_y = 0, unsafe=True): # <<<<<<<<<<<<<<
+ * if (image.mode != "RGB"):
+ * raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_1SetImage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_1SetImage(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_image = 0;
+ int __pyx_v_offset_x;
+ int __pyx_v_offset_y;
+ PyObject *__pyx_v_unsafe = 0;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("SetImage (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image,&__pyx_n_s_offset_x,&__pyx_n_s_offset_y,&__pyx_n_s_unsafe,0};
+ PyObject* values[4] = {0,0,0,0};
+ values[3] = ((PyObject *)Py_True);
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_image)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset_x);
+ if (value) { values[1] = value; kw_args--; }
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset_y);
+ if (value) { values[2] = value; kw_args--; }
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_unsafe);
+ if (value) { values[3] = value; kw_args--; }
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SetImage") < 0)) __PYX_ERR(0, 12, __pyx_L3_error)
+ }
+ } else {
+ switch (PyTuple_GET_SIZE(__pyx_args)) {
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ }
+ __pyx_v_image = values[0];
+ if (values[1]) {
+ __pyx_v_offset_x = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_offset_x == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error)
+ } else {
+ __pyx_v_offset_x = ((int)0);
+ }
+ if (values[2]) {
+ __pyx_v_offset_y = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_offset_y == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error)
+ } else {
+ __pyx_v_offset_y = ((int)0);
+ }
+ __pyx_v_unsafe = values[3];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("SetImage", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 12, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.Canvas.SetImage", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_6Canvas_SetImage(((struct __pyx_obj_9rgbmatrix_4core_Canvas *)__pyx_v_self), __pyx_v_image, __pyx_v_offset_x, __pyx_v_offset_y, __pyx_v_unsafe);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_SetImage(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self, PyObject *__pyx_v_image, int __pyx_v_offset_x, int __pyx_v_offset_y, PyObject *__pyx_v_unsafe) {
+ PyObject *__pyx_v_img_width = NULL;
+ PyObject *__pyx_v_img_height = NULL;
+ PyObject *__pyx_v_pixels = NULL;
+ PyObject *__pyx_v_x = NULL;
+ PyObject *__pyx_v_y = NULL;
+ PyObject *__pyx_v_r = NULL;
+ PyObject *__pyx_v_g = NULL;
+ PyObject *__pyx_v_b = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *(*__pyx_t_6)(PyObject *);
+ PyObject *__pyx_t_7 = NULL;
+ int __pyx_t_8;
+ PyObject *__pyx_t_9 = NULL;
+ long __pyx_t_10;
+ long __pyx_t_11;
+ Py_ssize_t __pyx_t_12;
+ PyObject *(*__pyx_t_13)(PyObject *);
+ Py_ssize_t __pyx_t_14;
+ PyObject *(*__pyx_t_15)(PyObject *);
+ PyObject *__pyx_t_16 = NULL;
+ PyObject *__pyx_t_17 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("SetImage", 0);
+
+ /* "rgbmatrix/core.pyx":13
+ *
+ * def SetImage(self, image, int offset_x = 0, int offset_y = 0, unsafe=True):
+ * if (image.mode != "RGB"): # <<<<<<<<<<<<<<
+ * raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)")
+ *
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_image, __pyx_n_s_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_RGB, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 13, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ if (unlikely(__pyx_t_2)) {
+
+ /* "rgbmatrix/core.pyx":14
+ * def SetImage(self, image, int offset_x = 0, int offset_y = 0, unsafe=True):
+ * if (image.mode != "RGB"):
+ * raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)") # <<<<<<<<<<<<<<
+ *
+ * if unsafe:
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(0, 14, __pyx_L1_error)
+
+ /* "rgbmatrix/core.pyx":13
+ *
+ * def SetImage(self, image, int offset_x = 0, int offset_y = 0, unsafe=True):
+ * if (image.mode != "RGB"): # <<<<<<<<<<<<<<
+ * raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)")
+ *
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":16
+ * raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)")
+ *
+ * if unsafe: # <<<<<<<<<<<<<<
+ * #In unsafe mode we directly access the underlying PIL image array
+ * #in cython, which is considered unsafe pointer accecss,
+ */
+ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_unsafe); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 16, __pyx_L1_error)
+ if (__pyx_t_2) {
+
+ /* "rgbmatrix/core.pyx":21
+ * #however it's super fast and seems to work fine
+ * #https://groups.google.com/forum/#!topic/cython-users/Dc1ft5W6KM4
+ * img_width, img_height = image.size # <<<<<<<<<<<<<<
+ * self.SetPixelsPillow(offset_x, offset_y, img_width, img_height, image)
+ * else:
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_image, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+ PyObject* sequence = __pyx_t_1;
+ Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+ if (unlikely(size != 2)) {
+ if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+ else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+ __PYX_ERR(0, 21, __pyx_L1_error)
+ }
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ if (likely(PyTuple_CheckExact(sequence))) {
+ __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
+ __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
+ } else {
+ __pyx_t_3 = PyList_GET_ITEM(sequence, 0);
+ __pyx_t_4 = PyList_GET_ITEM(sequence, 1);
+ }
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_t_4);
+ #else
+ __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 21, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 21, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ #endif
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ } else {
+ Py_ssize_t index = -1;
+ __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 21, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+ index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
+ __Pyx_GOTREF(__pyx_t_3);
+ index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
+ __Pyx_GOTREF(__pyx_t_4);
+ if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
+ __pyx_t_6 = NULL;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ goto __pyx_L6_unpacking_done;
+ __pyx_L5_unpacking_failed:;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_t_6 = NULL;
+ if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+ __PYX_ERR(0, 21, __pyx_L1_error)
+ __pyx_L6_unpacking_done:;
+ }
+ __pyx_v_img_width = __pyx_t_3;
+ __pyx_t_3 = 0;
+ __pyx_v_img_height = __pyx_t_4;
+ __pyx_t_4 = 0;
+
+ /* "rgbmatrix/core.pyx":22
+ * #https://groups.google.com/forum/#!topic/cython-users/Dc1ft5W6KM4
+ * img_width, img_height = image.size
+ * self.SetPixelsPillow(offset_x, offset_y, img_width, img_height, image) # <<<<<<<<<<<<<<
+ * else:
+ * # First implementation of a SetImage(). OPTIMIZE_ME: A more native
+ */
+ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_SetPixelsPillow); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 22, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_offset_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_offset_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 22, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_7 = NULL;
+ __pyx_t_8 = 0;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
+ __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
+ if (likely(__pyx_t_7)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+ __Pyx_INCREF(__pyx_t_7);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_4, function);
+ __pyx_t_8 = 1;
+ }
+ }
+ #if CYTHON_FAST_PYCALL
+ if (PyFunction_Check(__pyx_t_4)) {
+ PyObject *__pyx_temp[6] = {__pyx_t_7, __pyx_t_3, __pyx_t_5, __pyx_v_img_width, __pyx_v_img_height, __pyx_v_image};
+ __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 5+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ } else
+ #endif
+ #if CYTHON_FAST_PYCCALL
+ if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+ PyObject *__pyx_temp[6] = {__pyx_t_7, __pyx_t_3, __pyx_t_5, __pyx_v_img_width, __pyx_v_img_height, __pyx_v_image};
+ __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 5+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ } else
+ #endif
+ {
+ __pyx_t_9 = PyTuple_New(5+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 22, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ if (__pyx_t_7) {
+ __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
+ }
+ __Pyx_GIVEREF(__pyx_t_3);
+ PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_5);
+ PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
+ __Pyx_INCREF(__pyx_v_img_width);
+ __Pyx_GIVEREF(__pyx_v_img_width);
+ PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_8, __pyx_v_img_width);
+ __Pyx_INCREF(__pyx_v_img_height);
+ __Pyx_GIVEREF(__pyx_v_img_height);
+ PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_8, __pyx_v_img_height);
+ __Pyx_INCREF(__pyx_v_image);
+ __Pyx_GIVEREF(__pyx_v_image);
+ PyTuple_SET_ITEM(__pyx_t_9, 4+__pyx_t_8, __pyx_v_image);
+ __pyx_t_3 = 0;
+ __pyx_t_5 = 0;
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ }
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":16
+ * raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)")
+ *
+ * if unsafe: # <<<<<<<<<<<<<<
+ * #In unsafe mode we directly access the underlying PIL image array
+ * #in cython, which is considered unsafe pointer accecss,
+ */
+ goto __pyx_L4;
+ }
+
+ /* "rgbmatrix/core.pyx":27
+ * # implementation that directly reads the buffer and calls the underlying
+ * # C functions can certainly be faster.
+ * img_width, img_height = image.size # <<<<<<<<<<<<<<
+ * pixels = image.load()
+ * for x in range(max(0, -offset_x), min(img_width, self.width - offset_x)):
+ */
+ /*else*/ {
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_image, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+ PyObject* sequence = __pyx_t_1;
+ Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+ if (unlikely(size != 2)) {
+ if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+ else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+ __PYX_ERR(0, 27, __pyx_L1_error)
+ }
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ if (likely(PyTuple_CheckExact(sequence))) {
+ __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0);
+ __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1);
+ } else {
+ __pyx_t_4 = PyList_GET_ITEM(sequence, 0);
+ __pyx_t_9 = PyList_GET_ITEM(sequence, 1);
+ }
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(__pyx_t_9);
+ #else
+ __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 27, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 27, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ #endif
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ } else {
+ Py_ssize_t index = -1;
+ __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 27, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+ index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed;
+ __Pyx_GOTREF(__pyx_t_4);
+ index = 1; __pyx_t_9 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_9)) goto __pyx_L7_unpacking_failed;
+ __Pyx_GOTREF(__pyx_t_9);
+ if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
+ __pyx_t_6 = NULL;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ goto __pyx_L8_unpacking_done;
+ __pyx_L7_unpacking_failed:;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_t_6 = NULL;
+ if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+ __PYX_ERR(0, 27, __pyx_L1_error)
+ __pyx_L8_unpacking_done:;
+ }
+ __pyx_v_img_width = __pyx_t_4;
+ __pyx_t_4 = 0;
+ __pyx_v_img_height = __pyx_t_9;
+ __pyx_t_9 = 0;
+
+ /* "rgbmatrix/core.pyx":28
+ * # C functions can certainly be faster.
+ * img_width, img_height = image.size
+ * pixels = image.load() # <<<<<<<<<<<<<<
+ * for x in range(max(0, -offset_x), min(img_width, self.width - offset_x)):
+ * for y in range(max(0, -offset_y), min(img_height, self.height - offset_y)):
+ */
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_image, __pyx_n_s_load); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 28, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_4 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
+ __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
+ if (likely(__pyx_t_4)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_9, function);
+ }
+ }
+ __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ __pyx_v_pixels = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":29
+ * img_width, img_height = image.size
+ * pixels = image.load()
+ * for x in range(max(0, -offset_x), min(img_width, self.width - offset_x)): # <<<<<<<<<<<<<<
+ * for y in range(max(0, -offset_y), min(img_height, self.height - offset_y)):
+ * (r, g, b) = pixels[x, y]
+ */
+ __pyx_t_8 = (-__pyx_v_offset_x);
+ __pyx_t_10 = 0;
+ if (((__pyx_t_8 > __pyx_t_10) != 0)) {
+ __pyx_t_11 = __pyx_t_8;
+ } else {
+ __pyx_t_11 = __pyx_t_10;
+ }
+ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_width); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_offset_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_5 = PyNumber_Subtract(__pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_INCREF(__pyx_v_img_width);
+ __pyx_t_4 = __pyx_v_img_width;
+ __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (__pyx_t_2) {
+ __Pyx_INCREF(__pyx_t_5);
+ __pyx_t_9 = __pyx_t_5;
+ } else {
+ __Pyx_INCREF(__pyx_t_4);
+ __pyx_t_9 = __pyx_t_4;
+ }
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
+ __Pyx_INCREF(__pyx_t_9);
+ __Pyx_GIVEREF(__pyx_t_9);
+ PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_9);
+ __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_5, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ if (likely(PyList_CheckExact(__pyx_t_9)) || PyTuple_CheckExact(__pyx_t_9)) {
+ __pyx_t_5 = __pyx_t_9; __Pyx_INCREF(__pyx_t_5); __pyx_t_12 = 0;
+ __pyx_t_13 = NULL;
+ } else {
+ __pyx_t_12 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_13 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 29, __pyx_L1_error)
+ }
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ for (;;) {
+ if (likely(!__pyx_t_13)) {
+ if (likely(PyList_CheckExact(__pyx_t_5))) {
+ if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_5)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_9 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_12); __Pyx_INCREF(__pyx_t_9); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 29, __pyx_L1_error)
+ #else
+ __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ #endif
+ } else {
+ if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_12); __Pyx_INCREF(__pyx_t_9); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 29, __pyx_L1_error)
+ #else
+ __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 29, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ #endif
+ }
+ } else {
+ __pyx_t_9 = __pyx_t_13(__pyx_t_5);
+ if (unlikely(!__pyx_t_9)) {
+ PyObject* exc_type = PyErr_Occurred();
+ if (exc_type) {
+ if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+ else __PYX_ERR(0, 29, __pyx_L1_error)
+ }
+ break;
+ }
+ __Pyx_GOTREF(__pyx_t_9);
+ }
+ __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_9);
+ __pyx_t_9 = 0;
+
+ /* "rgbmatrix/core.pyx":30
+ * pixels = image.load()
+ * for x in range(max(0, -offset_x), min(img_width, self.width - offset_x)):
+ * for y in range(max(0, -offset_y), min(img_height, self.height - offset_y)): # <<<<<<<<<<<<<<
+ * (r, g, b) = pixels[x, y]
+ * self.SetPixel(x + offset_x, y + offset_y, r, g, b)
+ */
+ __pyx_t_8 = (-__pyx_v_offset_y);
+ __pyx_t_11 = 0;
+ if (((__pyx_t_8 > __pyx_t_11) != 0)) {
+ __pyx_t_10 = __pyx_t_8;
+ } else {
+ __pyx_t_10 = __pyx_t_11;
+ }
+ __pyx_t_9 = __Pyx_PyInt_From_long(__pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_height); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_offset_y); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_INCREF(__pyx_v_img_height);
+ __pyx_t_4 = __pyx_v_img_height;
+ __pyx_t_7 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ if (__pyx_t_2) {
+ __Pyx_INCREF(__pyx_t_3);
+ __pyx_t_1 = __pyx_t_3;
+ } else {
+ __Pyx_INCREF(__pyx_t_4);
+ __pyx_t_1 = __pyx_t_4;
+ }
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_9);
+ PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
+ __Pyx_INCREF(__pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
+ __pyx_t_9 = 0;
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
+ __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_14 = 0;
+ __pyx_t_15 = NULL;
+ } else {
+ __pyx_t_14 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_15 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 30, __pyx_L1_error)
+ }
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ for (;;) {
+ if (likely(!__pyx_t_15)) {
+ if (likely(PyList_CheckExact(__pyx_t_3))) {
+ if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_3)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_1); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 30, __pyx_L1_error)
+ #else
+ __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ #endif
+ } else {
+ if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_14); __Pyx_INCREF(__pyx_t_1); __pyx_t_14++; if (unlikely(0 < 0)) __PYX_ERR(0, 30, __pyx_L1_error)
+ #else
+ __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ #endif
+ }
+ } else {
+ __pyx_t_1 = __pyx_t_15(__pyx_t_3);
+ if (unlikely(!__pyx_t_1)) {
+ PyObject* exc_type = PyErr_Occurred();
+ if (exc_type) {
+ if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+ else __PYX_ERR(0, 30, __pyx_L1_error)
+ }
+ break;
+ }
+ __Pyx_GOTREF(__pyx_t_1);
+ }
+ __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":31
+ * for x in range(max(0, -offset_x), min(img_width, self.width - offset_x)):
+ * for y in range(max(0, -offset_y), min(img_height, self.height - offset_y)):
+ * (r, g, b) = pixels[x, y] # <<<<<<<<<<<<<<
+ * self.SetPixel(x + offset_x, y + offset_y, r, g, b)
+ *
+ */
+ __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_v_x);
+ __Pyx_GIVEREF(__pyx_v_x);
+ PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x);
+ __Pyx_INCREF(__pyx_v_y);
+ __Pyx_GIVEREF(__pyx_v_y);
+ PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y);
+ __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pixels, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 31, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
+ PyObject* sequence = __pyx_t_9;
+ Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+ if (unlikely(size != 3)) {
+ if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+ else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+ __PYX_ERR(0, 31, __pyx_L1_error)
+ }
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ if (likely(PyTuple_CheckExact(sequence))) {
+ __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
+ __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
+ __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2);
+ } else {
+ __pyx_t_1 = PyList_GET_ITEM(sequence, 0);
+ __pyx_t_4 = PyList_GET_ITEM(sequence, 1);
+ __pyx_t_7 = PyList_GET_ITEM(sequence, 2);
+ }
+ __Pyx_INCREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(__pyx_t_7);
+ #else
+ __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 31, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ #endif
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ } else {
+ Py_ssize_t index = -1;
+ __pyx_t_16 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 31, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_16);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ __pyx_t_6 = Py_TYPE(__pyx_t_16)->tp_iternext;
+ index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_16); if (unlikely(!__pyx_t_1)) goto __pyx_L13_unpacking_failed;
+ __Pyx_GOTREF(__pyx_t_1);
+ index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_16); if (unlikely(!__pyx_t_4)) goto __pyx_L13_unpacking_failed;
+ __Pyx_GOTREF(__pyx_t_4);
+ index = 2; __pyx_t_7 = __pyx_t_6(__pyx_t_16); if (unlikely(!__pyx_t_7)) goto __pyx_L13_unpacking_failed;
+ __Pyx_GOTREF(__pyx_t_7);
+ if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_16), 3) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
+ __pyx_t_6 = NULL;
+ __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+ goto __pyx_L14_unpacking_done;
+ __pyx_L13_unpacking_failed:;
+ __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+ __pyx_t_6 = NULL;
+ if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+ __PYX_ERR(0, 31, __pyx_L1_error)
+ __pyx_L14_unpacking_done:;
+ }
+ __Pyx_XDECREF_SET(__pyx_v_r, __pyx_t_1);
+ __pyx_t_1 = 0;
+ __Pyx_XDECREF_SET(__pyx_v_g, __pyx_t_4);
+ __pyx_t_4 = 0;
+ __Pyx_XDECREF_SET(__pyx_v_b, __pyx_t_7);
+ __pyx_t_7 = 0;
+
+ /* "rgbmatrix/core.pyx":32
+ * for y in range(max(0, -offset_y), min(img_height, self.height - offset_y)):
+ * (r, g, b) = pixels[x, y]
+ * self.SetPixel(x + offset_x, y + offset_y, r, g, b) # <<<<<<<<<<<<<<
+ *
+ * @cython.boundscheck(False)
+ */
+ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_SetPixel); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_offset_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_1 = PyNumber_Add(__pyx_v_x, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_offset_y); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_16 = PyNumber_Add(__pyx_v_y, __pyx_t_4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_16);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __pyx_t_4 = NULL;
+ __pyx_t_8 = 0;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
+ __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
+ if (likely(__pyx_t_4)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_7, function);
+ __pyx_t_8 = 1;
+ }
+ }
+ #if CYTHON_FAST_PYCALL
+ if (PyFunction_Check(__pyx_t_7)) {
+ PyObject *__pyx_temp[6] = {__pyx_t_4, __pyx_t_1, __pyx_t_16, __pyx_v_r, __pyx_v_g, __pyx_v_b};
+ __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 5+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_GOTREF(__pyx_t_9);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+ } else
+ #endif
+ #if CYTHON_FAST_PYCCALL
+ if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+ PyObject *__pyx_temp[6] = {__pyx_t_4, __pyx_t_1, __pyx_t_16, __pyx_v_r, __pyx_v_g, __pyx_v_b};
+ __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 5+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_GOTREF(__pyx_t_9);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+ } else
+ #endif
+ {
+ __pyx_t_17 = PyTuple_New(5+__pyx_t_8); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_17);
+ if (__pyx_t_4) {
+ __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_4); __pyx_t_4 = NULL;
+ }
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_8, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_16);
+ PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_8, __pyx_t_16);
+ __Pyx_INCREF(__pyx_v_r);
+ __Pyx_GIVEREF(__pyx_v_r);
+ PyTuple_SET_ITEM(__pyx_t_17, 2+__pyx_t_8, __pyx_v_r);
+ __Pyx_INCREF(__pyx_v_g);
+ __Pyx_GIVEREF(__pyx_v_g);
+ PyTuple_SET_ITEM(__pyx_t_17, 3+__pyx_t_8, __pyx_v_g);
+ __Pyx_INCREF(__pyx_v_b);
+ __Pyx_GIVEREF(__pyx_v_b);
+ PyTuple_SET_ITEM(__pyx_t_17, 4+__pyx_t_8, __pyx_v_b);
+ __pyx_t_1 = 0;
+ __pyx_t_16 = 0;
+ __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_17, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 32, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+ }
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+ /* "rgbmatrix/core.pyx":30
+ * pixels = image.load()
+ * for x in range(max(0, -offset_x), min(img_width, self.width - offset_x)):
+ * for y in range(max(0, -offset_y), min(img_height, self.height - offset_y)): # <<<<<<<<<<<<<<
+ * (r, g, b) = pixels[x, y]
+ * self.SetPixel(x + offset_x, y + offset_y, r, g, b)
+ */
+ }
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "rgbmatrix/core.pyx":29
+ * img_width, img_height = image.size
+ * pixels = image.load()
+ * for x in range(max(0, -offset_x), min(img_width, self.width - offset_x)): # <<<<<<<<<<<<<<
+ * for y in range(max(0, -offset_y), min(img_height, self.height - offset_y)):
+ * (r, g, b) = pixels[x, y]
+ */
+ }
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ }
+ __pyx_L4:;
+
+ /* "rgbmatrix/core.pyx":12
+ * raise Exception("Not implemented")
+ *
+ * def SetImage(self, image, int offset_x = 0, int offset_y = 0, unsafe=True): # <<<<<<<<<<<<<<
+ * if (image.mode != "RGB"):
+ * raise Exception("Currently, only RGB mode is supported for SetImage(). Please create images with mode 'RGB' or convert first with image = image.convert('RGB'). Pull requests to support more modes natively are also welcome :)")
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_XDECREF(__pyx_t_9);
+ __Pyx_XDECREF(__pyx_t_16);
+ __Pyx_XDECREF(__pyx_t_17);
+ __Pyx_AddTraceback("rgbmatrix.core.Canvas.SetImage", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_img_width);
+ __Pyx_XDECREF(__pyx_v_img_height);
+ __Pyx_XDECREF(__pyx_v_pixels);
+ __Pyx_XDECREF(__pyx_v_x);
+ __Pyx_XDECREF(__pyx_v_y);
+ __Pyx_XDECREF(__pyx_v_r);
+ __Pyx_XDECREF(__pyx_v_g);
+ __Pyx_XDECREF(__pyx_v_b);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":36
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * def SetPixelsPillow(self, int xstart, int ystart, int width, int height, image): # <<<<<<<<<<<<<<
+ * cdef cppinc.FrameCanvas* my_canvas = self.__getCanvas()
+ * cdef int frame_width = my_canvas.width()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_3SetPixelsPillow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_3SetPixelsPillow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ int __pyx_v_xstart;
+ int __pyx_v_ystart;
+ int __pyx_v_width;
+ int __pyx_v_height;
+ PyObject *__pyx_v_image = 0;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("SetPixelsPillow (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xstart,&__pyx_n_s_ystart,&__pyx_n_s_width,&__pyx_n_s_height,&__pyx_n_s_image,0};
+ PyObject* values[5] = {0,0,0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ CYTHON_FALLTHROUGH;
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xstart)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ystart)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixelsPillow", 1, 5, 5, 1); __PYX_ERR(0, 36, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixelsPillow", 1, 5, 5, 2); __PYX_ERR(0, 36, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixelsPillow", 1, 5, 5, 3); __PYX_ERR(0, 36, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 4:
+ if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_image)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixelsPillow", 1, 5, 5, 4); __PYX_ERR(0, 36, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SetPixelsPillow") < 0)) __PYX_ERR(0, 36, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ }
+ __pyx_v_xstart = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_xstart == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error)
+ __pyx_v_ystart = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_ystart == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error)
+ __pyx_v_width = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error)
+ __pyx_v_height = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error)
+ __pyx_v_image = values[4];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("SetPixelsPillow", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 36, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.Canvas.SetPixelsPillow", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_6Canvas_2SetPixelsPillow(((struct __pyx_obj_9rgbmatrix_4core_Canvas *)__pyx_v_self), __pyx_v_xstart, __pyx_v_ystart, __pyx_v_width, __pyx_v_height, __pyx_v_image);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_2SetPixelsPillow(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self, int __pyx_v_xstart, int __pyx_v_ystart, int __pyx_v_width, int __pyx_v_height, PyObject *__pyx_v_image) {
+ rgb_matrix::FrameCanvas *__pyx_v_my_canvas;
+ int __pyx_v_frame_width;
+ int __pyx_v_frame_height;
+ int __pyx_v_row;
+ int __pyx_v_col;
+ uint8_t __pyx_v_r;
+ uint8_t __pyx_v_g;
+ uint8_t __pyx_v_b;
+ uint32_t **__pyx_v_image_ptr;
+ uint32_t __pyx_v_pixel;
+ PyObject *__pyx_v_ptr_tmp = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ uintptr_t __pyx_t_5;
+ int __pyx_t_6;
+ int __pyx_t_7;
+ int __pyx_t_8;
+ long __pyx_t_9;
+ long __pyx_t_10;
+ int __pyx_t_11;
+ int __pyx_t_12;
+ int __pyx_t_13;
+ long __pyx_t_14;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("SetPixelsPillow", 0);
+
+ /* "rgbmatrix/core.pyx":37
+ * @cython.wraparound(False)
+ * def SetPixelsPillow(self, int xstart, int ystart, int width, int height, image):
+ * cdef cppinc.FrameCanvas* my_canvas = self.__getCanvas() # <<<<<<<<<<<<<<
+ * cdef int frame_width = my_canvas.width()
+ * cdef int frame_height = my_canvas.height()
+ */
+ try {
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_Canvas *)__pyx_v_self->__pyx_vtab)->__pyx___getCanvas(__pyx_v_self);
+ } catch(...) {
+ __Pyx_CppExn2PyErr();
+ __PYX_ERR(0, 37, __pyx_L1_error)
+ }
+ __pyx_v_my_canvas = ((rgb_matrix::FrameCanvas *)__pyx_t_1);
+
+ /* "rgbmatrix/core.pyx":38
+ * def SetPixelsPillow(self, int xstart, int ystart, int width, int height, image):
+ * cdef cppinc.FrameCanvas* my_canvas = self.__getCanvas()
+ * cdef int frame_width = my_canvas.width() # <<<<<<<<<<<<<<
+ * cdef int frame_height = my_canvas.height()
+ * cdef int row, col
+ */
+ __pyx_v_frame_width = __pyx_v_my_canvas->width();
+
+ /* "rgbmatrix/core.pyx":39
+ * cdef cppinc.FrameCanvas* my_canvas = self.__getCanvas()
+ * cdef int frame_width = my_canvas.width()
+ * cdef int frame_height = my_canvas.height() # <<<<<<<<<<<<<<
+ * cdef int row, col
+ * cdef uint8_t r, g, b
+ */
+ __pyx_v_frame_height = __pyx_v_my_canvas->height();
+
+ /* "rgbmatrix/core.pyx":44
+ * cdef uint32_t **image_ptr
+ * cdef uint32_t pixel
+ * image.load() # <<<<<<<<<<<<<<
+ * ptr_tmp = dict(image.im.unsafe_ptrs)['image32']
+ * image_ptr = ((ptr_tmp))
+ */
+ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_image, __pyx_n_s_load); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+ __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+ if (likely(__pyx_t_4)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_3, function);
+ }
+ }
+ __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "rgbmatrix/core.pyx":45
+ * cdef uint32_t pixel
+ * image.load()
+ * ptr_tmp = dict(image.im.unsafe_ptrs)['image32'] # <<<<<<<<<<<<<<
+ * image_ptr = ((ptr_tmp))
+ *
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_image, __pyx_n_s_im); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unsafe_ptrs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_t_2, __pyx_n_s_image32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_v_ptr_tmp = __pyx_t_3;
+ __pyx_t_3 = 0;
+
+ /* "rgbmatrix/core.pyx":46
+ * image.load()
+ * ptr_tmp = dict(image.im.unsafe_ptrs)['image32']
+ * image_ptr = ((ptr_tmp)) # <<<<<<<<<<<<<<
+ *
+ * for col in range(max(0, -xstart), min(width, frame_width - xstart)):
+ */
+ __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_v_ptr_tmp); if (unlikely((__pyx_t_5 == ((uintptr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L1_error)
+ __pyx_v_image_ptr = ((uint32_t **)((uintptr_t)__pyx_t_5));
+
+ /* "rgbmatrix/core.pyx":48
+ * image_ptr = ((ptr_tmp))
+ *
+ * for col in range(max(0, -xstart), min(width, frame_width - xstart)): # <<<<<<<<<<<<<<
+ * for row in range(max(0, -ystart), min(height, frame_height - ystart)):
+ * pixel = image_ptr[row][col]
+ */
+ __pyx_t_6 = (__pyx_v_frame_width - __pyx_v_xstart);
+ __pyx_t_7 = __pyx_v_width;
+ if (((__pyx_t_6 < __pyx_t_7) != 0)) {
+ __pyx_t_8 = __pyx_t_6;
+ } else {
+ __pyx_t_8 = __pyx_t_7;
+ }
+ __pyx_t_6 = __pyx_t_8;
+ __pyx_t_8 = (-__pyx_v_xstart);
+ __pyx_t_9 = 0;
+ if (((__pyx_t_8 > __pyx_t_9) != 0)) {
+ __pyx_t_10 = __pyx_t_8;
+ } else {
+ __pyx_t_10 = __pyx_t_9;
+ }
+ __pyx_t_8 = __pyx_t_6;
+ for (__pyx_t_7 = __pyx_t_10; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+ __pyx_v_col = __pyx_t_7;
+
+ /* "rgbmatrix/core.pyx":49
+ *
+ * for col in range(max(0, -xstart), min(width, frame_width - xstart)):
+ * for row in range(max(0, -ystart), min(height, frame_height - ystart)): # <<<<<<<<<<<<<<
+ * pixel = image_ptr[row][col]
+ * r = (pixel ) & 0xFF
+ */
+ __pyx_t_11 = (__pyx_v_frame_height - __pyx_v_ystart);
+ __pyx_t_12 = __pyx_v_height;
+ if (((__pyx_t_11 < __pyx_t_12) != 0)) {
+ __pyx_t_13 = __pyx_t_11;
+ } else {
+ __pyx_t_13 = __pyx_t_12;
+ }
+ __pyx_t_11 = __pyx_t_13;
+ __pyx_t_13 = (-__pyx_v_ystart);
+ __pyx_t_9 = 0;
+ if (((__pyx_t_13 > __pyx_t_9) != 0)) {
+ __pyx_t_14 = __pyx_t_13;
+ } else {
+ __pyx_t_14 = __pyx_t_9;
+ }
+ __pyx_t_13 = __pyx_t_11;
+ for (__pyx_t_12 = __pyx_t_14; __pyx_t_12 < __pyx_t_13; __pyx_t_12+=1) {
+ __pyx_v_row = __pyx_t_12;
+
+ /* "rgbmatrix/core.pyx":50
+ * for col in range(max(0, -xstart), min(width, frame_width - xstart)):
+ * for row in range(max(0, -ystart), min(height, frame_height - ystart)):
+ * pixel = image_ptr[row][col] # <<<<<<<<<<<<<<
+ * r = (pixel ) & 0xFF
+ * g = (pixel >> 8) & 0xFF
+ */
+ __pyx_v_pixel = ((__pyx_v_image_ptr[__pyx_v_row])[__pyx_v_col]);
+
+ /* "rgbmatrix/core.pyx":51
+ * for row in range(max(0, -ystart), min(height, frame_height - ystart)):
+ * pixel = image_ptr[row][col]
+ * r = (pixel ) & 0xFF # <<<<<<<<<<<<<<
+ * g = (pixel >> 8) & 0xFF
+ * b = (pixel >> 16) & 0xFF
+ */
+ __pyx_v_r = (__pyx_v_pixel & 0xFF);
+
+ /* "rgbmatrix/core.pyx":52
+ * pixel = image_ptr[row][col]
+ * r = (pixel ) & 0xFF
+ * g = (pixel >> 8) & 0xFF # <<<<<<<<<<<<<<
+ * b = (pixel >> 16) & 0xFF
+ * my_canvas.SetPixel(xstart+col, ystart+row, r, g, b)
+ */
+ __pyx_v_g = ((__pyx_v_pixel >> 8) & 0xFF);
+
+ /* "rgbmatrix/core.pyx":53
+ * r = (pixel ) & 0xFF
+ * g = (pixel >> 8) & 0xFF
+ * b = (pixel >> 16) & 0xFF # <<<<<<<<<<<<<<
+ * my_canvas.SetPixel(xstart+col, ystart+row, r, g, b)
+ *
+ */
+ __pyx_v_b = ((__pyx_v_pixel >> 16) & 0xFF);
+
+ /* "rgbmatrix/core.pyx":54
+ * g = (pixel >> 8) & 0xFF
+ * b = (pixel >> 16) & 0xFF
+ * my_canvas.SetPixel(xstart+col, ystart+row, r, g, b) # <<<<<<<<<<<<<<
+ *
+ * cdef class FrameCanvas(Canvas):
+ */
+ __pyx_v_my_canvas->SetPixel((__pyx_v_xstart + __pyx_v_col), (__pyx_v_ystart + __pyx_v_row), __pyx_v_r, __pyx_v_g, __pyx_v_b);
+ }
+ }
+
+ /* "rgbmatrix/core.pyx":36
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * def SetPixelsPillow(self, int xstart, int ystart, int width, int height, image): # <<<<<<<<<<<<<<
+ * cdef cppinc.FrameCanvas* my_canvas = self.__getCanvas()
+ * cdef int frame_width = my_canvas.width()
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("rgbmatrix.core.Canvas.SetPixelsPillow", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_ptr_tmp);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * cdef tuple state
+ * cdef object _dict
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_6Canvas_4__reduce_cython__(((struct __pyx_obj_9rgbmatrix_4core_Canvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_4__reduce_cython__(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self) {
+ PyObject *__pyx_v_state = 0;
+ PyObject *__pyx_v__dict = 0;
+ int __pyx_v_use_setstate;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":5
+ * cdef object _dict
+ * cdef bint use_setstate
+ * state = () # <<<<<<<<<<<<<<
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None:
+ */
+ __Pyx_INCREF(__pyx_empty_tuple);
+ __pyx_v_state = __pyx_empty_tuple;
+
+ /* "(tree fragment)":6
+ * cdef bint use_setstate
+ * state = ()
+ * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<<
+ * if _dict is not None:
+ * state += (_dict,)
+ */
+ __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v__dict = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":7
+ * state = ()
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None: # <<<<<<<<<<<<<<
+ * state += (_dict,)
+ * use_setstate = True
+ */
+ __pyx_t_2 = (__pyx_v__dict != Py_None);
+ __pyx_t_3 = (__pyx_t_2 != 0);
+ if (__pyx_t_3) {
+
+ /* "(tree fragment)":8
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None:
+ * state += (_dict,) # <<<<<<<<<<<<<<
+ * use_setstate = True
+ * else:
+ */
+ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_v__dict);
+ __Pyx_GIVEREF(__pyx_v__dict);
+ PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
+ __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
+ __pyx_t_4 = 0;
+
+ /* "(tree fragment)":9
+ * if _dict is not None:
+ * state += (_dict,)
+ * use_setstate = True # <<<<<<<<<<<<<<
+ * else:
+ * use_setstate = False
+ */
+ __pyx_v_use_setstate = 1;
+
+ /* "(tree fragment)":7
+ * state = ()
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None: # <<<<<<<<<<<<<<
+ * state += (_dict,)
+ * use_setstate = True
+ */
+ goto __pyx_L3;
+ }
+
+ /* "(tree fragment)":11
+ * use_setstate = True
+ * else:
+ * use_setstate = False # <<<<<<<<<<<<<<
+ * if use_setstate:
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, None), state
+ */
+ /*else*/ {
+ __pyx_v_use_setstate = 0;
+ }
+ __pyx_L3:;
+
+ /* "(tree fragment)":12
+ * else:
+ * use_setstate = False
+ * if use_setstate: # <<<<<<<<<<<<<<
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, None), state
+ * else:
+ */
+ __pyx_t_3 = (__pyx_v_use_setstate != 0);
+ if (__pyx_t_3) {
+
+ /* "(tree fragment)":13
+ * use_setstate = False
+ * if use_setstate:
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, None), state # <<<<<<<<<<<<<<
+ * else:
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, state)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Canvas); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_INCREF(__pyx_int_222419149);
+ __Pyx_GIVEREF(__pyx_int_222419149);
+ PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
+ __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(Py_None);
+ PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
+ __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+ __Pyx_INCREF(__pyx_v_state);
+ __Pyx_GIVEREF(__pyx_v_state);
+ PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
+ __pyx_t_4 = 0;
+ __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_5;
+ __pyx_t_5 = 0;
+ goto __pyx_L0;
+
+ /* "(tree fragment)":12
+ * else:
+ * use_setstate = False
+ * if use_setstate: # <<<<<<<<<<<<<<
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, None), state
+ * else:
+ */
+ }
+
+ /* "(tree fragment)":15
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, None), state
+ * else:
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, state) # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * __pyx_unpickle_Canvas__set_state(self, __pyx_state)
+ */
+ /*else*/ {
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Canvas); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_INCREF(__pyx_int_222419149);
+ __Pyx_GIVEREF(__pyx_int_222419149);
+ PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
+ __Pyx_INCREF(__pyx_v_state);
+ __Pyx_GIVEREF(__pyx_v_state);
+ PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
+ __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_5);
+ PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+ __pyx_t_5 = 0;
+ __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_4;
+ __pyx_t_4 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * cdef tuple state
+ * cdef object _dict
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("rgbmatrix.core.Canvas.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_state);
+ __Pyx_XDECREF(__pyx_v__dict);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":16
+ * else:
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, state)
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Canvas__set_state(self, __pyx_state)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_6Canvas_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_6Canvas_6__setstate_cython__(((struct __pyx_obj_9rgbmatrix_4core_Canvas *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_6Canvas_6__setstate_cython__(struct __pyx_obj_9rgbmatrix_4core_Canvas *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":17
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, state)
+ * def __setstate_cython__(self, __pyx_state):
+ * __pyx_unpickle_Canvas__set_state(self, __pyx_state) # <<<<<<<<<<<<<<
+ */
+ if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
+ __pyx_t_1 = __pyx_f_9rgbmatrix_4core___pyx_unpickle_Canvas__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "(tree fragment)":16
+ * else:
+ * return __pyx_unpickle_Canvas, (type(self), 0xd41d8cd, state)
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Canvas__set_state(self, __pyx_state)
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.Canvas.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":57
+ *
+ * cdef class FrameCanvas(Canvas):
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * if self.__canvas != NULL:
+ * self.__canvas = NULL
+ */
+
+/* Python wrapper */
+static void __pyx_pw_9rgbmatrix_4core_11FrameCanvas_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_9rgbmatrix_4core_11FrameCanvas_1__dealloc__(PyObject *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_pf_9rgbmatrix_4core_11FrameCanvas___dealloc__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_pf_9rgbmatrix_4core_11FrameCanvas___dealloc__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "rgbmatrix/core.pyx":58
+ * cdef class FrameCanvas(Canvas):
+ * def __dealloc__(self):
+ * if self.__canvas != NULL: # <<<<<<<<<<<<<<
+ * self.__canvas = NULL
+ *
+ */
+ __pyx_t_1 = ((((void *)__pyx_v_self->__pyx___canvas) != NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "rgbmatrix/core.pyx":59
+ * def __dealloc__(self):
+ * if self.__canvas != NULL:
+ * self.__canvas = NULL # <<<<<<<<<<<<<<
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ */
+ __pyx_v_self->__pyx___canvas = NULL;
+
+ /* "rgbmatrix/core.pyx":58
+ * cdef class FrameCanvas(Canvas):
+ * def __dealloc__(self):
+ * if self.__canvas != NULL: # <<<<<<<<<<<<<<
+ * self.__canvas = NULL
+ *
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":57
+ *
+ * cdef class FrameCanvas(Canvas):
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * if self.__canvas != NULL:
+ * self.__canvas = NULL
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "rgbmatrix/core.pyx":61
+ * self.__canvas = NULL
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *: # <<<<<<<<<<<<<<
+ * if self.__canvas != NULL:
+ * return self.__canvas
+ */
+
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_11FrameCanvas___getCanvas(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ rgb_matrix::Canvas *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getCanvas", 0);
+
+ /* "rgbmatrix/core.pyx":62
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ * if self.__canvas != NULL: # <<<<<<<<<<<<<<
+ * return self.__canvas
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ */
+ __pyx_t_1 = ((((void *)__pyx_v_self->__pyx___canvas) != NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "rgbmatrix/core.pyx":63
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ * if self.__canvas != NULL:
+ * return self.__canvas # <<<<<<<<<<<<<<
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ *
+ */
+ __pyx_r = __pyx_v_self->__pyx___canvas;
+ goto __pyx_L0;
+
+ /* "rgbmatrix/core.pyx":62
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ * if self.__canvas != NULL: # <<<<<<<<<<<<<<
+ * return self.__canvas
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":64
+ * if self.__canvas != NULL:
+ * return self.__canvas
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore") # <<<<<<<<<<<<<<
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue):
+ */
+ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __PYX_ERR(0, 64, __pyx_L1_error)
+
+ /* "rgbmatrix/core.pyx":61
+ * self.__canvas = NULL
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *: # <<<<<<<<<<<<<<
+ * if self.__canvas != NULL:
+ * return self.__canvas
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.__getCanvas", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_11FrameCanvas___getCanvas__pyx_wrap_1(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ return __pyx_f_9rgbmatrix_4core_11FrameCanvas___getCanvas(__pyx_v_self);
+}
+
+/* "rgbmatrix/core.pyx":66
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * (self.__getCanvas()).Fill(red, green, blue)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_3Fill(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_3Fill(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ uint8_t __pyx_v_red;
+ uint8_t __pyx_v_green;
+ uint8_t __pyx_v_blue;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("Fill (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_red,&__pyx_n_s_green,&__pyx_n_s_blue,0};
+ PyObject* values[3] = {0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_red)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("Fill", 1, 3, 3, 1); __PYX_ERR(0, 66, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("Fill", 1, 3, 3, 2); __PYX_ERR(0, 66, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Fill") < 0)) __PYX_ERR(0, 66, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ }
+ __pyx_v_red = __Pyx_PyInt_As_uint8_t(values[0]); if (unlikely((__pyx_v_red == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)
+ __pyx_v_green = __Pyx_PyInt_As_uint8_t(values[1]); if (unlikely((__pyx_v_green == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)
+ __pyx_v_blue = __Pyx_PyInt_As_uint8_t(values[2]); if (unlikely((__pyx_v_blue == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("Fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 66, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.Fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_2Fill(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self), __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_2Fill(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("Fill", 0);
+
+ /* "rgbmatrix/core.pyx":67
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue):
+ * (self.__getCanvas()).Fill(red, green, blue) # <<<<<<<<<<<<<<
+ *
+ * def Clear(self):
+ */
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L1_error)
+ ((rgb_matrix::FrameCanvas *)__pyx_t_1)->Fill(__pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* "rgbmatrix/core.pyx":66
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * (self.__getCanvas()).Fill(red, green, blue)
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.Fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":69
+ * (self.__getCanvas()).Fill(red, green, blue)
+ *
+ * def Clear(self): # <<<<<<<<<<<<<<
+ * (self.__getCanvas()).Clear()
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_5Clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_5Clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("Clear (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_4Clear(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_4Clear(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("Clear", 0);
+
+ /* "rgbmatrix/core.pyx":70
+ *
+ * def Clear(self):
+ * (self.__getCanvas()).Clear() # <<<<<<<<<<<<<<
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue):
+ */
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 70, __pyx_L1_error)
+ ((rgb_matrix::FrameCanvas *)__pyx_t_1)->Clear();
+
+ /* "rgbmatrix/core.pyx":69
+ * (self.__getCanvas()).Fill(red, green, blue)
+ *
+ * def Clear(self): # <<<<<<<<<<<<<<
+ * (self.__getCanvas()).Clear()
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.Clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":72
+ * (self.__getCanvas()).Clear()
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * (self.__getCanvas()).SetPixel(x, y, red, green, blue)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_7SetPixel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_7SetPixel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ int __pyx_v_x;
+ int __pyx_v_y;
+ uint8_t __pyx_v_red;
+ uint8_t __pyx_v_green;
+ uint8_t __pyx_v_blue;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("SetPixel (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_red,&__pyx_n_s_green,&__pyx_n_s_blue,0};
+ PyObject* values[5] = {0,0,0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ CYTHON_FALLTHROUGH;
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_red)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 4:
+ if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SetPixel") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ }
+ __pyx_v_x = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_x == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error)
+ __pyx_v_y = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_y == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error)
+ __pyx_v_red = __Pyx_PyInt_As_uint8_t(values[2]); if (unlikely((__pyx_v_red == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error)
+ __pyx_v_green = __Pyx_PyInt_As_uint8_t(values[3]); if (unlikely((__pyx_v_green == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error)
+ __pyx_v_blue = __Pyx_PyInt_As_uint8_t(values[4]); if (unlikely((__pyx_v_blue == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.SetPixel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_6SetPixel(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self), __pyx_v_x, __pyx_v_y, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_6SetPixel(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, int __pyx_v_x, int __pyx_v_y, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("SetPixel", 0);
+
+ /* "rgbmatrix/core.pyx":73
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue):
+ * (self.__getCanvas()).SetPixel(x, y, red, green, blue) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L1_error)
+ ((rgb_matrix::FrameCanvas *)__pyx_t_1)->SetPixel(__pyx_v_x, __pyx_v_y, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* "rgbmatrix/core.pyx":72
+ * (self.__getCanvas()).Clear()
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * (self.__getCanvas()).SetPixel(x, y, red, green, blue)
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.SetPixel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":77
+ *
+ * property width:
+ * def __get__(self): return (self.__getCanvas()).width() # <<<<<<<<<<<<<<
+ *
+ * property height:
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_5width_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_5width_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_5width___get__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_5width___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyInt_From_int(((rgb_matrix::FrameCanvas *)__pyx_t_1)->width()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.width.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":80
+ *
+ * property height:
+ * def __get__(self): return (self.__getCanvas()).height() # <<<<<<<<<<<<<<
+ *
+ * property pwmBits:
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_6height_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_6height_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_6height___get__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_6height___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyInt_From_int(((rgb_matrix::FrameCanvas *)__pyx_t_1)->height()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 80, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.height.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":83
+ *
+ * property pwmBits:
+ * def __get__(self): return (self.__getCanvas()).pwmbits() # <<<<<<<<<<<<<<
+ * def __set__(self, pwmBits): (self.__getCanvas()).SetPWMBits(pwmBits)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_7pwmBits_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_7pwmBits_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_7pwmBits___get__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_7pwmBits___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 83, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyInt_From_uint8_t(((rgb_matrix::FrameCanvas *)__pyx_t_1)->pwmbits()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 83, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.pwmBits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":84
+ * property pwmBits:
+ * def __get__(self): return (self.__getCanvas()).pwmbits()
+ * def __set__(self, pwmBits): (self.__getCanvas()).SetPWMBits(pwmBits) # <<<<<<<<<<<<<<
+ *
+ * property brightness:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_11FrameCanvas_7pwmBits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_pwmBits); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_11FrameCanvas_7pwmBits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_pwmBits) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_7pwmBits_2__set__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self), ((PyObject *)__pyx_v_pwmBits));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_11FrameCanvas_7pwmBits_2__set__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, PyObject *__pyx_v_pwmBits) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ uint8_t __pyx_t_2;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyInt_As_uint8_t(__pyx_v_pwmBits); if (unlikely((__pyx_t_2 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L1_error)
+ (void)(((rgb_matrix::FrameCanvas *)__pyx_t_1)->SetPWMBits(__pyx_t_2));
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.pwmBits.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":87
+ *
+ * property brightness:
+ * def __get__(self): return (self.__getCanvas()).brightness() # <<<<<<<<<<<<<<
+ * def __set__(self, val): (self.__getCanvas()).SetBrightness(val)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_10brightness_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_10brightness_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_10brightness___get__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_10brightness___get__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyInt_From_uint8_t(((rgb_matrix::FrameCanvas *)__pyx_t_1)->brightness()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.brightness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":88
+ * property brightness:
+ * def __get__(self): return (self.__getCanvas()).brightness()
+ * def __set__(self, val): (self.__getCanvas()).SetBrightness(val) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_11FrameCanvas_10brightness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_val); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_11FrameCanvas_10brightness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_val) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_10brightness_2__set__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self), ((PyObject *)__pyx_v_val));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_11FrameCanvas_10brightness_2__set__(struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, PyObject *__pyx_v_val) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ rgb_matrix::Canvas *__pyx_t_1;
+ uint8_t __pyx_t_2;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx___getCanvas(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyInt_As_uint8_t(__pyx_v_val); if (unlikely((__pyx_t_2 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L1_error)
+ ((rgb_matrix::FrameCanvas *)__pyx_t_1)->SetBrightness(__pyx_t_2);
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.brightness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_8__reduce_cython__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_11FrameCanvas_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_11FrameCanvas_10__setstate_cython__(((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_11FrameCanvas_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<<
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("self.__canvas cannot be converted to a Python object for pickling")
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.FrameCanvas.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":92
+ *
+ * cdef class RGBMatrixOptions:
+ * def __cinit__(self): # <<<<<<<<<<<<<<
+ * self.__options = cppinc.Options()
+ * self.__runtime_options = cppinc.RuntimeOptions()
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+ if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+ if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions___cinit__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions___cinit__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ struct rgb_matrix::RGBMatrix::Options __pyx_t_1;
+ struct rgb_matrix::RuntimeOptions __pyx_t_2;
+ __Pyx_RefNannySetupContext("__cinit__", 0);
+
+ /* "rgbmatrix/core.pyx":93
+ * cdef class RGBMatrixOptions:
+ * def __cinit__(self):
+ * self.__options = cppinc.Options() # <<<<<<<<<<<<<<
+ * self.__runtime_options = cppinc.RuntimeOptions()
+ *
+ */
+ __pyx_v_self->__pyx___options = __pyx_t_1;
+
+ /* "rgbmatrix/core.pyx":94
+ * def __cinit__(self):
+ * self.__options = cppinc.Options()
+ * self.__runtime_options = cppinc.RuntimeOptions() # <<<<<<<<<<<<<<
+ *
+ * # RGBMatrix::Options properties
+ */
+ __pyx_v_self->__pyx___runtime_options = __pyx_t_2;
+
+ /* "rgbmatrix/core.pyx":92
+ *
+ * cdef class RGBMatrixOptions:
+ * def __cinit__(self): # <<<<<<<<<<<<<<
+ * self.__options = cppinc.Options()
+ * self.__runtime_options = cppinc.RuntimeOptions()
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":98
+ * # RGBMatrix::Options properties
+ * property hardware_mapping:
+ * def __get__(self): return self.__options.hardware_mapping # <<<<<<<<<<<<<<
+ * def __set__(self, value):
+ * self.__py_encoded_hardware_mapping = value.encode('utf-8')
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->__pyx___options.hardware_mapping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.hardware_mapping.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":99
+ * property hardware_mapping:
+ * def __get__(self): return self.__options.hardware_mapping
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_hardware_mapping = value.encode('utf-8')
+ * self.__options.hardware_mapping = self.__py_encoded_hardware_mapping
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16hardware_mapping_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ char const *__pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+
+ /* "rgbmatrix/core.pyx":100
+ * def __get__(self): return self.__options.hardware_mapping
+ * def __set__(self, value):
+ * self.__py_encoded_hardware_mapping = value.encode('utf-8') # <<<<<<<<<<<<<<
+ * self.__options.hardware_mapping = self.__py_encoded_hardware_mapping
+ *
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+ __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+ if (likely(__pyx_t_3)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_2, function);
+ }
+ }
+ __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_s_utf_8) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_utf_8);
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 100, __pyx_L1_error)
+ __Pyx_GIVEREF(__pyx_t_1);
+ __Pyx_GOTREF(__pyx_v_self->__pyx___py_encoded_hardware_mapping);
+ __Pyx_DECREF(__pyx_v_self->__pyx___py_encoded_hardware_mapping);
+ __pyx_v_self->__pyx___py_encoded_hardware_mapping = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":101
+ * def __set__(self, value):
+ * self.__py_encoded_hardware_mapping = value.encode('utf-8')
+ * self.__options.hardware_mapping = self.__py_encoded_hardware_mapping # <<<<<<<<<<<<<<
+ *
+ * property rows:
+ */
+ if (unlikely(__pyx_v_self->__pyx___py_encoded_hardware_mapping == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+ __PYX_ERR(0, 101, __pyx_L1_error)
+ }
+ __pyx_t_4 = __Pyx_PyBytes_AsString(__pyx_v_self->__pyx___py_encoded_hardware_mapping); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.hardware_mapping = __pyx_t_4;
+
+ /* "rgbmatrix/core.pyx":99
+ * property hardware_mapping:
+ * def __get__(self): return self.__options.hardware_mapping
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_hardware_mapping = value.encode('utf-8')
+ * self.__options.hardware_mapping = self.__py_encoded_hardware_mapping
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.hardware_mapping.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":104
+ *
+ * property rows:
+ * def __get__(self): return self.__options.rows # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.rows = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4rows_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4rows_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4rows___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4rows___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.rows); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.rows.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":105
+ * property rows:
+ * def __get__(self): return self.__options.rows
+ * def __set__(self, uint8_t value): self.__options.rows = value # <<<<<<<<<<<<<<
+ *
+ * property cols:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4rows_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4rows_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.rows.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4rows_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4rows_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.rows = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":108
+ *
+ * property cols:
+ * def __get__(self): return self.__options.cols # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.cols = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4cols_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4cols_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4cols___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4cols___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.cols); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.cols.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":109
+ * property cols:
+ * def __get__(self): return self.__options.cols
+ * def __set__(self, uint8_t value): self.__options.cols = value # <<<<<<<<<<<<<<
+ *
+ * property chain_length:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4cols_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_4cols_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.cols.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4cols_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4cols_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.cols = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":112
+ *
+ * property chain_length:
+ * def __get__(self): return self.__options.chain_length # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.chain_length = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.chain_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.chain_length.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":113
+ * property chain_length:
+ * def __get__(self): return self.__options.chain_length
+ * def __set__(self, uint8_t value): self.__options.chain_length = value # <<<<<<<<<<<<<<
+ *
+ * property parallel:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.chain_length.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12chain_length_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.chain_length = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":116
+ *
+ * property parallel:
+ * def __get__(self): return self.__options.parallel # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.parallel = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8parallel_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8parallel_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8parallel___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8parallel___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.parallel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.parallel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":117
+ * property parallel:
+ * def __get__(self): return self.__options.parallel
+ * def __set__(self, uint8_t value): self.__options.parallel = value # <<<<<<<<<<<<<<
+ *
+ * property pwm_bits:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8parallel_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8parallel_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 117, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.parallel.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8parallel_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8parallel_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.parallel = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":120
+ *
+ * property pwm_bits:
+ * def __get__(self): return self.__options.pwm_bits # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.pwm_bits = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.pwm_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pwm_bits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":121
+ * property pwm_bits:
+ * def __get__(self): return self.__options.pwm_bits
+ * def __set__(self, uint8_t value): self.__options.pwm_bits = value # <<<<<<<<<<<<<<
+ *
+ * property pwm_lsb_nanoseconds:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 121, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pwm_bits.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_8pwm_bits_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.pwm_bits = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":124
+ *
+ * property pwm_lsb_nanoseconds:
+ * def __get__(self): return self.__options.pwm_lsb_nanoseconds # <<<<<<<<<<<<<<
+ * def __set__(self, uint32_t value): self.__options.pwm_lsb_nanoseconds = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.pwm_lsb_nanoseconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pwm_lsb_nanoseconds.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":125
+ * property pwm_lsb_nanoseconds:
+ * def __get__(self): return self.__options.pwm_lsb_nanoseconds
+ * def __set__(self, uint32_t value): self.__options.pwm_lsb_nanoseconds = value # <<<<<<<<<<<<<<
+ *
+ * property brightness:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint32_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint32_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 125, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pwm_lsb_nanoseconds.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint32_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pwm_lsb_nanoseconds_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint32_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.pwm_lsb_nanoseconds = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":128
+ *
+ * property brightness:
+ * def __get__(self): return self.__options.brightness # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.brightness = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10brightness_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10brightness_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10brightness___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10brightness___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.brightness); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 128, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.brightness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":129
+ * property brightness:
+ * def __get__(self): return self.__options.brightness
+ * def __set__(self, uint8_t value): self.__options.brightness = value # <<<<<<<<<<<<<<
+ *
+ * property scan_mode:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10brightness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10brightness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 129, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.brightness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10brightness_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10brightness_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.brightness = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":132
+ *
+ * property scan_mode:
+ * def __get__(self): return self.__options.scan_mode # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.scan_mode = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.scan_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.scan_mode.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":133
+ * property scan_mode:
+ * def __get__(self): return self.__options.scan_mode
+ * def __set__(self, uint8_t value): self.__options.scan_mode = value # <<<<<<<<<<<<<<
+ *
+ * property multiplexing:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 133, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.scan_mode.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_9scan_mode_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.scan_mode = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":136
+ *
+ * property multiplexing:
+ * def __get__(self): return self.__options.multiplexing # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.multiplexing = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.multiplexing); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.multiplexing.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":137
+ * property multiplexing:
+ * def __get__(self): return self.__options.multiplexing
+ * def __set__(self, uint8_t value): self.__options.multiplexing = value # <<<<<<<<<<<<<<
+ *
+ * property row_address_type:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.multiplexing.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_12multiplexing_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.multiplexing = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":140
+ *
+ * property row_address_type:
+ * def __get__(self): return self.__options.row_address_type # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.row_address_type = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.row_address_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.row_address_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":141
+ * property row_address_type:
+ * def __get__(self): return self.__options.row_address_type
+ * def __set__(self, uint8_t value): self.__options.row_address_type = value # <<<<<<<<<<<<<<
+ *
+ * property disable_hardware_pulsing:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 141, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.row_address_type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16row_address_type_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.row_address_type = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":144
+ *
+ * property disable_hardware_pulsing:
+ * def __get__(self): return self.__options.disable_hardware_pulsing # <<<<<<<<<<<<<<
+ * def __set__(self, value): self.__options.disable_hardware_pulsing = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->__pyx___options.disable_hardware_pulsing); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.disable_hardware_pulsing.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":145
+ * property disable_hardware_pulsing:
+ * def __get__(self): return self.__options.disable_hardware_pulsing
+ * def __set__(self, value): self.__options.disable_hardware_pulsing = value # <<<<<<<<<<<<<<
+ *
+ * property show_refresh_rate:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_24disable_hardware_pulsing_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ bool __pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 145, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.disable_hardware_pulsing = __pyx_t_1;
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.disable_hardware_pulsing.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":148
+ *
+ * property show_refresh_rate:
+ * def __get__(self): return self.__options.show_refresh_rate # <<<<<<<<<<<<<<
+ * def __set__(self, value): self.__options.show_refresh_rate = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->__pyx___options.show_refresh_rate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.show_refresh_rate.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":149
+ * property show_refresh_rate:
+ * def __get__(self): return self.__options.show_refresh_rate
+ * def __set__(self, value): self.__options.show_refresh_rate = value # <<<<<<<<<<<<<<
+ *
+ * property inverse_colors:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_17show_refresh_rate_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ bool __pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 149, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.show_refresh_rate = __pyx_t_1;
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.show_refresh_rate.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":152
+ *
+ * property inverse_colors:
+ * def __get__(self): return self.__options.inverse_colors # <<<<<<<<<<<<<<
+ * def __set__(self, value): self.__options.inverse_colors = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->__pyx___options.inverse_colors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 152, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.inverse_colors.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":153
+ * property inverse_colors:
+ * def __get__(self): return self.__options.inverse_colors
+ * def __set__(self, value): self.__options.inverse_colors = value # <<<<<<<<<<<<<<
+ *
+ * property led_rgb_sequence:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_14inverse_colors_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ bool __pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 153, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.inverse_colors = __pyx_t_1;
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.inverse_colors.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":156
+ *
+ * property led_rgb_sequence:
+ * def __get__(self): return self.__options.led_rgb_sequence # <<<<<<<<<<<<<<
+ * def __set__(self, value):
+ * self.__py_encoded_led_rgb_sequence = value.encode('utf-8')
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->__pyx___options.led_rgb_sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.led_rgb_sequence.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":157
+ * property led_rgb_sequence:
+ * def __get__(self): return self.__options.led_rgb_sequence
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_led_rgb_sequence = value.encode('utf-8')
+ * self.__options.led_rgb_sequence = self.__py_encoded_led_rgb_sequence
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_16led_rgb_sequence_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ char const *__pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+
+ /* "rgbmatrix/core.pyx":158
+ * def __get__(self): return self.__options.led_rgb_sequence
+ * def __set__(self, value):
+ * self.__py_encoded_led_rgb_sequence = value.encode('utf-8') # <<<<<<<<<<<<<<
+ * self.__options.led_rgb_sequence = self.__py_encoded_led_rgb_sequence
+ *
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+ __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+ if (likely(__pyx_t_3)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_2, function);
+ }
+ }
+ __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_s_utf_8) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_utf_8);
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 158, __pyx_L1_error)
+ __Pyx_GIVEREF(__pyx_t_1);
+ __Pyx_GOTREF(__pyx_v_self->__pyx___py_encoded_led_rgb_sequence);
+ __Pyx_DECREF(__pyx_v_self->__pyx___py_encoded_led_rgb_sequence);
+ __pyx_v_self->__pyx___py_encoded_led_rgb_sequence = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":159
+ * def __set__(self, value):
+ * self.__py_encoded_led_rgb_sequence = value.encode('utf-8')
+ * self.__options.led_rgb_sequence = self.__py_encoded_led_rgb_sequence # <<<<<<<<<<<<<<
+ *
+ * property pixel_mapper_config:
+ */
+ if (unlikely(__pyx_v_self->__pyx___py_encoded_led_rgb_sequence == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+ __PYX_ERR(0, 159, __pyx_L1_error)
+ }
+ __pyx_t_4 = __Pyx_PyBytes_AsString(__pyx_v_self->__pyx___py_encoded_led_rgb_sequence); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 159, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.led_rgb_sequence = __pyx_t_4;
+
+ /* "rgbmatrix/core.pyx":157
+ * property led_rgb_sequence:
+ * def __get__(self): return self.__options.led_rgb_sequence
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_led_rgb_sequence = value.encode('utf-8')
+ * self.__options.led_rgb_sequence = self.__py_encoded_led_rgb_sequence
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.led_rgb_sequence.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":162
+ *
+ * property pixel_mapper_config:
+ * def __get__(self): return self.__options.pixel_mapper_config # <<<<<<<<<<<<<<
+ * def __set__(self, value):
+ * self.__py_encoded_pixel_mapper_config = value.encode('utf-8')
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->__pyx___options.pixel_mapper_config); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 162, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pixel_mapper_config.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":163
+ * property pixel_mapper_config:
+ * def __get__(self): return self.__options.pixel_mapper_config
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_pixel_mapper_config = value.encode('utf-8')
+ * self.__options.pixel_mapper_config = self.__py_encoded_pixel_mapper_config
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_19pixel_mapper_config_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ char const *__pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+
+ /* "rgbmatrix/core.pyx":164
+ * def __get__(self): return self.__options.pixel_mapper_config
+ * def __set__(self, value):
+ * self.__py_encoded_pixel_mapper_config = value.encode('utf-8') # <<<<<<<<<<<<<<
+ * self.__options.pixel_mapper_config = self.__py_encoded_pixel_mapper_config
+ *
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+ __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+ if (likely(__pyx_t_3)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_2, function);
+ }
+ }
+ __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_s_utf_8) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_utf_8);
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 164, __pyx_L1_error)
+ __Pyx_GIVEREF(__pyx_t_1);
+ __Pyx_GOTREF(__pyx_v_self->__pyx___py_encoded_pixel_mapper_config);
+ __Pyx_DECREF(__pyx_v_self->__pyx___py_encoded_pixel_mapper_config);
+ __pyx_v_self->__pyx___py_encoded_pixel_mapper_config = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":165
+ * def __set__(self, value):
+ * self.__py_encoded_pixel_mapper_config = value.encode('utf-8')
+ * self.__options.pixel_mapper_config = self.__py_encoded_pixel_mapper_config # <<<<<<<<<<<<<<
+ *
+ * property panel_type:
+ */
+ if (unlikely(__pyx_v_self->__pyx___py_encoded_pixel_mapper_config == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+ __PYX_ERR(0, 165, __pyx_L1_error)
+ }
+ __pyx_t_4 = __Pyx_PyBytes_AsString(__pyx_v_self->__pyx___py_encoded_pixel_mapper_config); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 165, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.pixel_mapper_config = __pyx_t_4;
+
+ /* "rgbmatrix/core.pyx":163
+ * property pixel_mapper_config:
+ * def __get__(self): return self.__options.pixel_mapper_config
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_pixel_mapper_config = value.encode('utf-8')
+ * self.__options.pixel_mapper_config = self.__py_encoded_pixel_mapper_config
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pixel_mapper_config.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":168
+ *
+ * property panel_type:
+ * def __get__(self): return self.__options.panel_type # <<<<<<<<<<<<<<
+ * def __set__(self, value):
+ * self.__py_encoded_panel_type = value.encode('utf-8')
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->__pyx___options.panel_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.panel_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":169
+ * property panel_type:
+ * def __get__(self): return self.__options.panel_type
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_panel_type = value.encode('utf-8')
+ * self.__options.panel_type = self.__py_encoded_panel_type
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_10panel_type_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ char const *__pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+
+ /* "rgbmatrix/core.pyx":170
+ * def __get__(self): return self.__options.panel_type
+ * def __set__(self, value):
+ * self.__py_encoded_panel_type = value.encode('utf-8') # <<<<<<<<<<<<<<
+ * self.__options.panel_type = self.__py_encoded_panel_type
+ *
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+ __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+ if (likely(__pyx_t_3)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_2, function);
+ }
+ }
+ __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_s_utf_8) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_utf_8);
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 170, __pyx_L1_error)
+ __Pyx_GIVEREF(__pyx_t_1);
+ __Pyx_GOTREF(__pyx_v_self->__pyx___py_encoded_panel_type);
+ __Pyx_DECREF(__pyx_v_self->__pyx___py_encoded_panel_type);
+ __pyx_v_self->__pyx___py_encoded_panel_type = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":171
+ * def __set__(self, value):
+ * self.__py_encoded_panel_type = value.encode('utf-8')
+ * self.__options.panel_type = self.__py_encoded_panel_type # <<<<<<<<<<<<<<
+ *
+ * property pwm_dither_bits:
+ */
+ if (unlikely(__pyx_v_self->__pyx___py_encoded_panel_type == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+ __PYX_ERR(0, 171, __pyx_L1_error)
+ }
+ __pyx_t_4 = __Pyx_PyBytes_AsString(__pyx_v_self->__pyx___py_encoded_panel_type); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.panel_type = __pyx_t_4;
+
+ /* "rgbmatrix/core.pyx":169
+ * property panel_type:
+ * def __get__(self): return self.__options.panel_type
+ * def __set__(self, value): # <<<<<<<<<<<<<<
+ * self.__py_encoded_panel_type = value.encode('utf-8')
+ * self.__options.panel_type = self.__py_encoded_panel_type
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.panel_type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":174
+ *
+ * property pwm_dither_bits:
+ * def __get__(self): return self.__options.pwm_dither_bits # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__options.pwm_dither_bits = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.pwm_dither_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pwm_dither_bits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":175
+ * property pwm_dither_bits:
+ * def __get__(self): return self.__options.pwm_dither_bits
+ * def __set__(self, uint8_t value): self.__options.pwm_dither_bits = value # <<<<<<<<<<<<<<
+ *
+ * property limit_refresh_rate_hz:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 175, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.pwm_dither_bits.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15pwm_dither_bits_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___options.pwm_dither_bits = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":178
+ *
+ * property limit_refresh_rate_hz:
+ * def __get__(self): return self.__options.limit_refresh_rate_hz # <<<<<<<<<<<<<<
+ * def __set__(self, value): self.__options.limit_refresh_rate_hz = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___options.limit_refresh_rate_hz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.limit_refresh_rate_hz.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":179
+ * property limit_refresh_rate_hz:
+ * def __get__(self): return self.__options.limit_refresh_rate_hz
+ * def __set__(self, value): self.__options.limit_refresh_rate_hz = value # <<<<<<<<<<<<<<
+ *
+ *
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_21limit_refresh_rate_hz_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 179, __pyx_L1_error)
+ __pyx_v_self->__pyx___options.limit_refresh_rate_hz = __pyx_t_1;
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.limit_refresh_rate_hz.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":185
+ *
+ * property gpio_slowdown:
+ * def __get__(self): return self.__runtime_options.gpio_slowdown # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__runtime_options.gpio_slowdown = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___runtime_options.gpio_slowdown); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.gpio_slowdown.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":186
+ * property gpio_slowdown:
+ * def __get__(self): return self.__runtime_options.gpio_slowdown
+ * def __set__(self, uint8_t value): self.__runtime_options.gpio_slowdown = value # <<<<<<<<<<<<<<
+ *
+ * property daemon:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 186, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.gpio_slowdown.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_13gpio_slowdown_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___runtime_options.gpio_slowdown = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":189
+ *
+ * property daemon:
+ * def __get__(self): return self.__runtime_options.daemon # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__runtime_options.daemon = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_6daemon_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_6daemon_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_6daemon___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_6daemon___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___runtime_options.daemon); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 189, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.daemon.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":190
+ * property daemon:
+ * def __get__(self): return self.__runtime_options.daemon
+ * def __set__(self, uint8_t value): self.__runtime_options.daemon = value # <<<<<<<<<<<<<<
+ *
+ * property drop_privileges:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_6daemon_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_6daemon_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 190, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.daemon.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_6daemon_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_6daemon_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___runtime_options.daemon = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":193
+ *
+ * property drop_privileges:
+ * def __get__(self): return self.__runtime_options.drop_privileges # <<<<<<<<<<<<<<
+ * def __set__(self, uint8_t value): self.__runtime_options.drop_privileges = value
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___runtime_options.drop_privileges); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.drop_privileges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":194
+ * property drop_privileges:
+ * def __get__(self): return self.__runtime_options.drop_privileges
+ * def __set__(self, uint8_t value): self.__runtime_options.drop_privileges = value # <<<<<<<<<<<<<<
+ *
+ * cdef class RGBMatrix(Canvas):
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
+ uint8_t __pyx_v_value;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ assert(__pyx_arg_value); {
+ __pyx_v_value = __Pyx_PyInt_As_uint8_t(__pyx_arg_value); if (unlikely((__pyx_v_value == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 194, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.drop_privileges.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((uint8_t)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_15drop_privileges_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, uint8_t __pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_v_self->__pyx___runtime_options.drop_privileges = __pyx_v_value;
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_2__reduce_cython__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_16RGBMatrixOptions_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4__setstate_cython__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_16RGBMatrixOptions_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrixOptions.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":197
+ *
+ * cdef class RGBMatrix(Canvas):
+ * def __cinit__(self, int rows = 0, int chains = 0, int parallel = 0, # <<<<<<<<<<<<<<
+ * RGBMatrixOptions options = None):
+ *
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ int __pyx_v_rows;
+ int __pyx_v_chains;
+ int __pyx_v_parallel;
+ struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_options = 0;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rows,&__pyx_n_s_chains,&__pyx_n_s_parallel,&__pyx_n_s_options,0};
+ PyObject* values[4] = {0,0,0,0};
+
+ /* "rgbmatrix/core.pyx":198
+ * cdef class RGBMatrix(Canvas):
+ * def __cinit__(self, int rows = 0, int chains = 0, int parallel = 0,
+ * RGBMatrixOptions options = None): # <<<<<<<<<<<<<<
+ *
+ * # If RGBMatrixOptions not provided, create defaults and set any optional
+ */
+ values[3] = (PyObject *)((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)Py_None);
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rows);
+ if (value) { values[0] = value; kw_args--; }
+ }
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_chains);
+ if (value) { values[1] = value; kw_args--; }
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_parallel);
+ if (value) { values[2] = value; kw_args--; }
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_options);
+ if (value) { values[3] = value; kw_args--; }
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 197, __pyx_L3_error)
+ }
+ } else {
+ switch (PyTuple_GET_SIZE(__pyx_args)) {
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ }
+ if (values[0]) {
+ __pyx_v_rows = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rows == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error)
+ } else {
+ __pyx_v_rows = ((int)0);
+ }
+ if (values[1]) {
+ __pyx_v_chains = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_chains == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error)
+ } else {
+ __pyx_v_chains = ((int)0);
+ }
+ if (values[2]) {
+ __pyx_v_parallel = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_parallel == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 197, __pyx_L3_error)
+ } else {
+ __pyx_v_parallel = ((int)0);
+ }
+ __pyx_v_options = ((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)values[3]);
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 197, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_options), __pyx_ptype_9rgbmatrix_4core_RGBMatrixOptions, 1, "options", 0))) __PYX_ERR(0, 198, __pyx_L1_error)
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix___cinit__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), __pyx_v_rows, __pyx_v_chains, __pyx_v_parallel, __pyx_v_options);
+
+ /* "rgbmatrix/core.pyx":197
+ *
+ * cdef class RGBMatrix(Canvas):
+ * def __cinit__(self, int rows = 0, int chains = 0, int parallel = 0, # <<<<<<<<<<<<<<
+ * RGBMatrixOptions options = None):
+ *
+ */
+
+ /* function exit code */
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix___cinit__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, int __pyx_v_rows, int __pyx_v_chains, int __pyx_v_parallel, struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *__pyx_v_options) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__cinit__", 0);
+ __Pyx_INCREF((PyObject *)__pyx_v_options);
+
+ /* "rgbmatrix/core.pyx":202
+ * # If RGBMatrixOptions not provided, create defaults and set any optional
+ * # parameters supplied
+ * if options == None: # <<<<<<<<<<<<<<
+ * options = RGBMatrixOptions()
+ *
+ */
+ __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_options), Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 202, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ if (__pyx_t_2) {
+
+ /* "rgbmatrix/core.pyx":203
+ * # parameters supplied
+ * if options == None:
+ * options = RGBMatrixOptions() # <<<<<<<<<<<<<<
+ *
+ * if rows > 0:
+ */
+ __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_9rgbmatrix_4core_RGBMatrixOptions)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF_SET(__pyx_v_options, ((struct __pyx_obj_9rgbmatrix_4core_RGBMatrixOptions *)__pyx_t_1));
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":202
+ * # If RGBMatrixOptions not provided, create defaults and set any optional
+ * # parameters supplied
+ * if options == None: # <<<<<<<<<<<<<<
+ * options = RGBMatrixOptions()
+ *
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":205
+ * options = RGBMatrixOptions()
+ *
+ * if rows > 0: # <<<<<<<<<<<<<<
+ * options.rows = rows
+ * if chains > 0:
+ */
+ __pyx_t_2 = ((__pyx_v_rows > 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "rgbmatrix/core.pyx":206
+ *
+ * if rows > 0:
+ * options.rows = rows # <<<<<<<<<<<<<<
+ * if chains > 0:
+ * options.chain_length = chains
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rows); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_options), __pyx_n_s_rows, __pyx_t_1) < 0) __PYX_ERR(0, 206, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":205
+ * options = RGBMatrixOptions()
+ *
+ * if rows > 0: # <<<<<<<<<<<<<<
+ * options.rows = rows
+ * if chains > 0:
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":207
+ * if rows > 0:
+ * options.rows = rows
+ * if chains > 0: # <<<<<<<<<<<<<<
+ * options.chain_length = chains
+ * if parallel > 0:
+ */
+ __pyx_t_2 = ((__pyx_v_chains > 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "rgbmatrix/core.pyx":208
+ * options.rows = rows
+ * if chains > 0:
+ * options.chain_length = chains # <<<<<<<<<<<<<<
+ * if parallel > 0:
+ * options.parallel = parallel
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_chains); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_options), __pyx_n_s_chain_length, __pyx_t_1) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":207
+ * if rows > 0:
+ * options.rows = rows
+ * if chains > 0: # <<<<<<<<<<<<<<
+ * options.chain_length = chains
+ * if parallel > 0:
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":209
+ * if chains > 0:
+ * options.chain_length = chains
+ * if parallel > 0: # <<<<<<<<<<<<<<
+ * options.parallel = parallel
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_parallel > 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "rgbmatrix/core.pyx":210
+ * options.chain_length = chains
+ * if parallel > 0:
+ * options.parallel = parallel # <<<<<<<<<<<<<<
+ *
+ * self.__matrix = cppinc.CreateMatrixFromOptions(options.__options,
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_parallel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_options), __pyx_n_s_parallel, __pyx_t_1) < 0) __PYX_ERR(0, 210, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":209
+ * if chains > 0:
+ * options.chain_length = chains
+ * if parallel > 0: # <<<<<<<<<<<<<<
+ * options.parallel = parallel
+ *
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":212
+ * options.parallel = parallel
+ *
+ * self.__matrix = cppinc.CreateMatrixFromOptions(options.__options, # <<<<<<<<<<<<<<
+ * options.__runtime_options)
+ *
+ */
+ __pyx_v_self->__pyx___matrix = rgb_matrix::CreateMatrixFromOptions(__pyx_v_options->__pyx___options, __pyx_v_options->__pyx___runtime_options);
+
+ /* "rgbmatrix/core.pyx":197
+ *
+ * cdef class RGBMatrix(Canvas):
+ * def __cinit__(self, int rows = 0, int chains = 0, int parallel = 0, # <<<<<<<<<<<<<<
+ * RGBMatrixOptions options = None):
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_options);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":215
+ * options.__runtime_options)
+ *
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * self.__matrix.Clear()
+ * del self.__matrix
+ */
+
+/* Python wrapper */
+static void __pyx_pw_9rgbmatrix_4core_9RGBMatrix_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_9rgbmatrix_4core_9RGBMatrix_3__dealloc__(PyObject *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_pf_9rgbmatrix_4core_9RGBMatrix_2__dealloc__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_pf_9rgbmatrix_4core_9RGBMatrix_2__dealloc__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "rgbmatrix/core.pyx":216
+ *
+ * def __dealloc__(self):
+ * self.__matrix.Clear() # <<<<<<<<<<<<<<
+ * del self.__matrix
+ *
+ */
+ __pyx_v_self->__pyx___matrix->Clear();
+
+ /* "rgbmatrix/core.pyx":217
+ * def __dealloc__(self):
+ * self.__matrix.Clear()
+ * del self.__matrix # <<<<<<<<<<<<<<
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ */
+ delete __pyx_v_self->__pyx___matrix;
+
+ /* "rgbmatrix/core.pyx":215
+ * options.__runtime_options)
+ *
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * self.__matrix.Clear()
+ * del self.__matrix
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "rgbmatrix/core.pyx":219
+ * del self.__matrix
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *: # <<<<<<<<<<<<<<
+ * if self.__matrix != NULL:
+ * return self.__matrix
+ */
+
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_9RGBMatrix___getCanvas(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ rgb_matrix::Canvas *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getCanvas", 0);
+
+ /* "rgbmatrix/core.pyx":220
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ * if self.__matrix != NULL: # <<<<<<<<<<<<<<
+ * return self.__matrix
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ */
+ __pyx_t_1 = ((((void *)__pyx_v_self->__pyx___matrix) != NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "rgbmatrix/core.pyx":221
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ * if self.__matrix != NULL:
+ * return self.__matrix # <<<<<<<<<<<<<<
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ *
+ */
+ __pyx_r = __pyx_v_self->__pyx___matrix;
+ goto __pyx_L0;
+
+ /* "rgbmatrix/core.pyx":220
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *:
+ * if self.__matrix != NULL: # <<<<<<<<<<<<<<
+ * return self.__matrix
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ */
+ }
+
+ /* "rgbmatrix/core.pyx":222
+ * if self.__matrix != NULL:
+ * return self.__matrix
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore") # <<<<<<<<<<<<<<
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue):
+ */
+ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __PYX_ERR(0, 222, __pyx_L1_error)
+
+ /* "rgbmatrix/core.pyx":219
+ * del self.__matrix
+ *
+ * cdef cppinc.Canvas* __getCanvas(self) except *: # <<<<<<<<<<<<<<
+ * if self.__matrix != NULL:
+ * return self.__matrix
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.__getCanvas", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+rgb_matrix::Canvas *__pyx_f_9rgbmatrix_4core_9RGBMatrix___getCanvas__pyx_wrap_1(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ return __pyx_f_9rgbmatrix_4core_9RGBMatrix___getCanvas(__pyx_v_self);
+}
+
+/* "rgbmatrix/core.pyx":224
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * self.__matrix.Fill(red, green, blue)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_5Fill(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_5Fill(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ uint8_t __pyx_v_red;
+ uint8_t __pyx_v_green;
+ uint8_t __pyx_v_blue;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("Fill (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_red,&__pyx_n_s_green,&__pyx_n_s_blue,0};
+ PyObject* values[3] = {0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_red)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("Fill", 1, 3, 3, 1); __PYX_ERR(0, 224, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("Fill", 1, 3, 3, 2); __PYX_ERR(0, 224, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Fill") < 0)) __PYX_ERR(0, 224, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ }
+ __pyx_v_red = __Pyx_PyInt_As_uint8_t(values[0]); if (unlikely((__pyx_v_red == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L3_error)
+ __pyx_v_green = __Pyx_PyInt_As_uint8_t(values[1]); if (unlikely((__pyx_v_green == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L3_error)
+ __pyx_v_blue = __Pyx_PyInt_As_uint8_t(values[2]); if (unlikely((__pyx_v_blue == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("Fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 224, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.Fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_4Fill(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_4Fill(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("Fill", 0);
+
+ /* "rgbmatrix/core.pyx":225
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue):
+ * self.__matrix.Fill(red, green, blue) # <<<<<<<<<<<<<<
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue):
+ */
+ __pyx_v_self->__pyx___matrix->Fill(__pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* "rgbmatrix/core.pyx":224
+ * raise Exception("Canvas was destroyed or not initialized, you cannot use this object anymore")
+ *
+ * def Fill(self, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * self.__matrix.Fill(red, green, blue)
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":227
+ * self.__matrix.Fill(red, green, blue)
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * self.__matrix.SetPixel(x, y, red, green, blue)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_7SetPixel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_7SetPixel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ int __pyx_v_x;
+ int __pyx_v_y;
+ uint8_t __pyx_v_red;
+ uint8_t __pyx_v_green;
+ uint8_t __pyx_v_blue;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("SetPixel (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_red,&__pyx_n_s_green,&__pyx_n_s_blue,0};
+ PyObject* values[5] = {0,0,0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ CYTHON_FALLTHROUGH;
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 1); __PYX_ERR(0, 227, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_red)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 2); __PYX_ERR(0, 227, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 3); __PYX_ERR(0, 227, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 4:
+ if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, 4); __PYX_ERR(0, 227, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SetPixel") < 0)) __PYX_ERR(0, 227, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ }
+ __pyx_v_x = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_x == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L3_error)
+ __pyx_v_y = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_y == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L3_error)
+ __pyx_v_red = __Pyx_PyInt_As_uint8_t(values[2]); if (unlikely((__pyx_v_red == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L3_error)
+ __pyx_v_green = __Pyx_PyInt_As_uint8_t(values[3]); if (unlikely((__pyx_v_green == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L3_error)
+ __pyx_v_blue = __Pyx_PyInt_As_uint8_t(values[4]); if (unlikely((__pyx_v_blue == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 227, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("SetPixel", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 227, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.SetPixel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_6SetPixel(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), __pyx_v_x, __pyx_v_y, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_6SetPixel(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, int __pyx_v_x, int __pyx_v_y, uint8_t __pyx_v_red, uint8_t __pyx_v_green, uint8_t __pyx_v_blue) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("SetPixel", 0);
+
+ /* "rgbmatrix/core.pyx":228
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue):
+ * self.__matrix.SetPixel(x, y, red, green, blue) # <<<<<<<<<<<<<<
+ *
+ * def Clear(self):
+ */
+ __pyx_v_self->__pyx___matrix->SetPixel(__pyx_v_x, __pyx_v_y, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+
+ /* "rgbmatrix/core.pyx":227
+ * self.__matrix.Fill(red, green, blue)
+ *
+ * def SetPixel(self, int x, int y, uint8_t red, uint8_t green, uint8_t blue): # <<<<<<<<<<<<<<
+ * self.__matrix.SetPixel(x, y, red, green, blue)
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":230
+ * self.__matrix.SetPixel(x, y, red, green, blue)
+ *
+ * def Clear(self): # <<<<<<<<<<<<<<
+ * self.__matrix.Clear()
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_9Clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_9Clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("Clear (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_8Clear(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_8Clear(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("Clear", 0);
+
+ /* "rgbmatrix/core.pyx":231
+ *
+ * def Clear(self):
+ * self.__matrix.Clear() # <<<<<<<<<<<<<<
+ *
+ * def CreateFrameCanvas(self):
+ */
+ __pyx_v_self->__pyx___matrix->Clear();
+
+ /* "rgbmatrix/core.pyx":230
+ * self.__matrix.SetPixel(x, y, red, green, blue)
+ *
+ * def Clear(self): # <<<<<<<<<<<<<<
+ * self.__matrix.Clear()
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":233
+ * self.__matrix.Clear()
+ *
+ * def CreateFrameCanvas(self): # <<<<<<<<<<<<<<
+ * return __createFrameCanvas(self.__matrix.CreateFrameCanvas())
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_11CreateFrameCanvas(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_11CreateFrameCanvas(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("CreateFrameCanvas (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_10CreateFrameCanvas(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_10CreateFrameCanvas(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("CreateFrameCanvas", 0);
+
+ /* "rgbmatrix/core.pyx":234
+ *
+ * def CreateFrameCanvas(self):
+ * return __createFrameCanvas(self.__matrix.CreateFrameCanvas()) # <<<<<<<<<<<<<<
+ *
+ * def SwapOnVSync(self, FrameCanvas newFrame):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __pyx_f_9rgbmatrix_4core___createFrameCanvas(__pyx_v_self->__pyx___matrix->CreateFrameCanvas()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "rgbmatrix/core.pyx":233
+ * self.__matrix.Clear()
+ *
+ * def CreateFrameCanvas(self): # <<<<<<<<<<<<<<
+ * return __createFrameCanvas(self.__matrix.CreateFrameCanvas())
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.CreateFrameCanvas", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":236
+ * return __createFrameCanvas(self.__matrix.CreateFrameCanvas())
+ *
+ * def SwapOnVSync(self, FrameCanvas newFrame): # <<<<<<<<<<<<<<
+ * return __createFrameCanvas(self.__matrix.SwapOnVSync(newFrame.__canvas))
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_13SwapOnVSync(PyObject *__pyx_v_self, PyObject *__pyx_v_newFrame); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_13SwapOnVSync(PyObject *__pyx_v_self, PyObject *__pyx_v_newFrame) {
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("SwapOnVSync (wrapper)", 0);
+ if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_newFrame), __pyx_ptype_9rgbmatrix_4core_FrameCanvas, 1, "newFrame", 0))) __PYX_ERR(0, 236, __pyx_L1_error)
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_12SwapOnVSync(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), ((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_v_newFrame));
+
+ /* function exit code */
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_12SwapOnVSync(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_newFrame) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("SwapOnVSync", 0);
+
+ /* "rgbmatrix/core.pyx":237
+ *
+ * def SwapOnVSync(self, FrameCanvas newFrame):
+ * return __createFrameCanvas(self.__matrix.SwapOnVSync(newFrame.__canvas)) # <<<<<<<<<<<<<<
+ *
+ * property luminanceCorrect:
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __pyx_f_9rgbmatrix_4core___createFrameCanvas(__pyx_v_self->__pyx___matrix->SwapOnVSync(__pyx_v_newFrame->__pyx___canvas)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "rgbmatrix/core.pyx":236
+ * return __createFrameCanvas(self.__matrix.CreateFrameCanvas())
+ *
+ * def SwapOnVSync(self, FrameCanvas newFrame): # <<<<<<<<<<<<<<
+ * return __createFrameCanvas(self.__matrix.SwapOnVSync(newFrame.__canvas))
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.SwapOnVSync", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":240
+ *
+ * property luminanceCorrect:
+ * def __get__(self): return self.__matrix.luminance_correct() # <<<<<<<<<<<<<<
+ * def __set__(self, luminanceCorrect): self.__matrix.set_luminance_correct(luminanceCorrect)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->__pyx___matrix->luminance_correct()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.luminanceCorrect.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":241
+ * property luminanceCorrect:
+ * def __get__(self): return self.__matrix.luminance_correct()
+ * def __set__(self, luminanceCorrect): self.__matrix.set_luminance_correct(luminanceCorrect) # <<<<<<<<<<<<<<
+ *
+ * property pwmBits:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_luminanceCorrect); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_luminanceCorrect) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), ((PyObject *)__pyx_v_luminanceCorrect));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix_16luminanceCorrect_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, PyObject *__pyx_v_luminanceCorrect) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ bool __pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_luminanceCorrect); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L1_error)
+ __pyx_v_self->__pyx___matrix->set_luminance_correct(__pyx_t_1);
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.luminanceCorrect.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":244
+ *
+ * property pwmBits:
+ * def __get__(self): return self.__matrix.pwmbits() # <<<<<<<<<<<<<<
+ * def __set__(self, pwmBits): self.__matrix.SetPWMBits(pwmBits)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_7pwmBits_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_7pwmBits_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_7pwmBits___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_7pwmBits___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_uint8_t(__pyx_v_self->__pyx___matrix->pwmbits()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.pwmBits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":245
+ * property pwmBits:
+ * def __get__(self): return self.__matrix.pwmbits()
+ * def __set__(self, pwmBits): self.__matrix.SetPWMBits(pwmBits) # <<<<<<<<<<<<<<
+ *
+ * property brightness:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_7pwmBits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_pwmBits); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_7pwmBits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_pwmBits) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_7pwmBits_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), ((PyObject *)__pyx_v_pwmBits));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix_7pwmBits_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, PyObject *__pyx_v_pwmBits) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ uint8_t __pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = __Pyx_PyInt_As_uint8_t(__pyx_v_pwmBits); if (unlikely((__pyx_t_1 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 245, __pyx_L1_error)
+ (void)(__pyx_v_self->__pyx___matrix->SetPWMBits(__pyx_t_1));
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.pwmBits.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":248
+ *
+ * property brightness:
+ * def __get__(self): return self.__matrix.brightness() # <<<<<<<<<<<<<<
+ * def __set__(self, brightness): self.__matrix.SetBrightness(brightness)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_10brightness_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_10brightness_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_10brightness___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_10brightness___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_uint8_t(__pyx_v_self->__pyx___matrix->brightness()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 248, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.brightness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":249
+ * property brightness:
+ * def __get__(self): return self.__matrix.brightness()
+ * def __set__(self, brightness): self.__matrix.SetBrightness(brightness) # <<<<<<<<<<<<<<
+ *
+ * property height:
+ */
+
+/* Python wrapper */
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_10brightness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_brightness); /*proto*/
+static int __pyx_pw_9rgbmatrix_4core_9RGBMatrix_10brightness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_brightness) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_10brightness_2__set__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), ((PyObject *)__pyx_v_brightness));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_pf_9rgbmatrix_4core_9RGBMatrix_10brightness_2__set__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, PyObject *__pyx_v_brightness) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ uint8_t __pyx_t_1;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__set__", 0);
+ __pyx_t_1 = __Pyx_PyInt_As_uint8_t(__pyx_v_brightness); if (unlikely((__pyx_t_1 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 249, __pyx_L1_error)
+ __pyx_v_self->__pyx___matrix->SetBrightness(__pyx_t_1);
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.brightness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":252
+ *
+ * property height:
+ * def __get__(self): return self.__matrix.height() # <<<<<<<<<<<<<<
+ *
+ * property width:
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_6height_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_6height_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_6height___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_6height___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___matrix->height()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.height.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":255
+ *
+ * property width:
+ * def __get__(self): return self.__matrix.width() # <<<<<<<<<<<<<<
+ *
+ * cdef __createFrameCanvas(cppinc.FrameCanvas* newCanvas):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_5width_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_5width_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_5width___get__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_5width___get__(struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx___matrix->width()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.width.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_14__reduce_cython__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_14__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw_9rgbmatrix_4core_9RGBMatrix_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_9rgbmatrix_4core_9RGBMatrix_16__setstate_cython__(((struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core_9RGBMatrix_16__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9rgbmatrix_4core_RGBMatrix *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.RGBMatrix.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "rgbmatrix/core.pyx":257
+ * def __get__(self): return self.__matrix.width()
+ *
+ * cdef __createFrameCanvas(cppinc.FrameCanvas* newCanvas): # <<<<<<<<<<<<<<
+ * canvas = FrameCanvas()
+ * canvas.__canvas = newCanvas
+ */
+
+static PyObject *__pyx_f_9rgbmatrix_4core___createFrameCanvas(rgb_matrix::FrameCanvas *__pyx_v_newCanvas) {
+ struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *__pyx_v_canvas = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__createFrameCanvas", 0);
+
+ /* "rgbmatrix/core.pyx":258
+ *
+ * cdef __createFrameCanvas(cppinc.FrameCanvas* newCanvas):
+ * canvas = FrameCanvas() # <<<<<<<<<<<<<<
+ * canvas.__canvas = newCanvas
+ * return canvas
+ */
+ __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_9rgbmatrix_4core_FrameCanvas)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_canvas = ((struct __pyx_obj_9rgbmatrix_4core_FrameCanvas *)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "rgbmatrix/core.pyx":259
+ * cdef __createFrameCanvas(cppinc.FrameCanvas* newCanvas):
+ * canvas = FrameCanvas()
+ * canvas.__canvas = newCanvas # <<<<<<<<<<<<<<
+ * return canvas
+ *
+ */
+ __pyx_v_canvas->__pyx___canvas = __pyx_v_newCanvas;
+
+ /* "rgbmatrix/core.pyx":260
+ * canvas = FrameCanvas()
+ * canvas.__canvas = newCanvas
+ * return canvas # <<<<<<<<<<<<<<
+ *
+ * # Local Variables:
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(((PyObject *)__pyx_v_canvas));
+ __pyx_r = ((PyObject *)__pyx_v_canvas);
+ goto __pyx_L0;
+
+ /* "rgbmatrix/core.pyx":257
+ * def __get__(self): return self.__matrix.width()
+ *
+ * cdef __createFrameCanvas(cppinc.FrameCanvas* newCanvas): # <<<<<<<<<<<<<<
+ * canvas = FrameCanvas()
+ * canvas.__canvas = newCanvas
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("rgbmatrix.core.__createFrameCanvas", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_canvas);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __pyx_unpickle_Canvas(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<<
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9rgbmatrix_4core_1__pyx_unpickle_Canvas(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_9rgbmatrix_4core_1__pyx_unpickle_Canvas = {"__pyx_unpickle_Canvas", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9rgbmatrix_4core_1__pyx_unpickle_Canvas, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_9rgbmatrix_4core_1__pyx_unpickle_Canvas(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v___pyx_type = 0;
+ long __pyx_v___pyx_checksum;
+ PyObject *__pyx_v___pyx_state = 0;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Canvas (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
+ PyObject* values[3] = {0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Canvas", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Canvas", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Canvas") < 0)) __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ }
+ __pyx_v___pyx_type = values[0];
+ __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
+ __pyx_v___pyx_state = values[2];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Canvas", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("rgbmatrix.core.__pyx_unpickle_Canvas", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_9rgbmatrix_4core___pyx_unpickle_Canvas(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9rgbmatrix_4core___pyx_unpickle_Canvas(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_v___pyx_PickleError = 0;
+ PyObject *__pyx_v___pyx_result = 0;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_t_6;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Canvas", 0);
+
+ /* "(tree fragment)":4
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ * if __pyx_checksum != 0xd41d8cd: # <<<<<<<<<<<<<<
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ */
+ __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd41d8cd) != 0);
+ if (__pyx_t_1) {
+
+ /* "(tree fragment)":5
+ * cdef object __pyx_result
+ * if __pyx_checksum != 0xd41d8cd:
+ * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<<
+ * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ * __pyx_result = Canvas.__new__(__pyx_type)
+ */
+ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_INCREF(__pyx_n_s_PickleError);
+ __Pyx_GIVEREF(__pyx_n_s_PickleError);
+ PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
+ __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_INCREF(__pyx_t_2);
+ __pyx_v___pyx_PickleError = __pyx_t_2;
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "(tree fragment)":6
+ * if __pyx_checksum != 0xd41d8cd:
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) # <<<<<<<<<<<<<<
+ * __pyx_result = Canvas.__new__(__pyx_type)
+ * if __pyx_state is not None:
+ */
+ __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __Pyx_INCREF(__pyx_v___pyx_PickleError);
+ __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
+ if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
+ __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
+ if (likely(__pyx_t_5)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+ __Pyx_INCREF(__pyx_t_5);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_2, function);
+ }
+ }
+ __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 6, __pyx_L1_error)
+
+ /* "(tree fragment)":4
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ * if __pyx_checksum != 0xd41d8cd: # <<<<<<<<<<<<<<
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ */
+ }
+
+ /* "(tree fragment)":7
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ * __pyx_result = Canvas.__new__(__pyx_type) # <<<<<<<<<<<<<<
+ * if __pyx_state is not None:
+ * __pyx_unpickle_Canvas__set_state(