Added preflight option to update the QR codes.

- Needed for s-expression files
- Not working for KiCad 6 (bug in the Python API)
This commit is contained in:
Salvador E. Tropea 2022-01-04 10:21:59 -03:00
parent d0801d1e5d
commit 7992fd9888
16 changed files with 11239 additions and 586 deletions

View File

@ -163,6 +163,9 @@ This section is used to specify tasks that will be executed before generating an
- `tag_delimiter`: [string='@'] Character used to indicate the beginning and the end of a tag. - `tag_delimiter`: [string='@'] Character used to indicate the beginning and the end of a tag.
Don't change it unless you really know about KiCad's file formats. Don't change it unless you really know about KiCad's file formats.
- `text`: [string=''] Text to insert instead of the tag. - `text`: [string=''] Text to insert instead of the tag.
- `update_qr`: [boolean=false] Update the QR codes.
Complements the `qr_lib` output.
The KiCad 6 files and the KiCad 5 PCB needs manual update, generating a new library isn't enough.
- `update_xml`: [boolean=false] Update the XML version of the BoM (Bill of Materials). - `update_xml`: [boolean=false] Update the XML version of the BoM (Bill of Materials).
To ensure our generated BoM is up to date. To ensure our generated BoM is up to date.
Note that this isn't needed when using the internal BoM generator (`bom`). Note that this isn't needed when using the internal BoM generator (`bom`).

View File

@ -43,6 +43,10 @@ preflight:
before: 'Git hash: <' before: 'Git hash: <'
after: '>' after: '>'
# [boolean=false] Update the QR codes.
# Complements the `qr_lib` output.
# The KiCad 6 files and the KiCad 5 PCB needs manual update, generating a new library isn't enough.
update_qr: true
# [boolean=false] Update the XML version of the BoM (Bill of Materials). # [boolean=false] Update the XML version of the BoM (Bill of Materials).
# To ensure our generated BoM is up to date. # To ensure our generated BoM is up to date.
# Note that this isn't needed when using the internal BoM generator (`bom`). # Note that this isn't needed when using the internal BoM generator (`bom`).

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (c) 2020-2021 Salvador E. Tropea # Copyright (c) 2020-2022 Salvador E. Tropea
# Copyright (c) 2020-2021 Instituto Nacional de Tecnología Industrial # Copyright (c) 2020-2022 Instituto Nacional de Tecnología Industrial
# Copyright (c) 2018 John Beard # Copyright (c) 2018 John Beard
# License: GPL-3.0 # License: GPL-3.0
# Project: KiBot (formerly KiPlot) # Project: KiBot (formerly KiPlot)
@ -359,8 +359,12 @@ def run_output(out):
def generate_outputs(outputs, target, invert, skip_pre, cli_order): def generate_outputs(outputs, target, invert, skip_pre, cli_order):
logger.debug("Starting outputs for board {}".format(GS.pcb_file)) logger.debug("Starting outputs for board {}".format(GS.pcb_file))
GS.outputs = outputs
preflight_checks(skip_pre) preflight_checks(skip_pre)
# Chek if the preflights pulled options
for out in RegOutput.get_prioritary_outputs():
config_output(out)
logger.info('- '+str(out))
run_output(out)
# Check if all must be skipped # Check if all must be skipped
n = len(target) n = len(target)
if n == 0 and invert: if n == 0 and invert:
@ -383,10 +387,9 @@ def generate_outputs(outputs, target, invert, skip_pre, cli_order):
run_output(out) run_output(out)
else: else:
# Use the declaration order # Use the declaration order
for out in outputs: for out in RegOutput.get_outputs():
if (((n == 0 or ((out.name not in target) and invert)) and out.run_by_default) or if (((n == 0 or ((out.name not in target) and invert)) and out.run_by_default) or
((out.name in target) and not invert)): ((out.name in target) and not invert)):
# Exclude
config_output(out) config_output(out)
logger.info('- '+str(out)) logger.info('- '+str(out))
run_output(out) run_output(out)
@ -492,7 +495,6 @@ def generate_makefile(makefile, cfg_file, outputs, kibot_sys=False):
f.write('LOGFILE?=kibot_error.log\n') f.write('LOGFILE?=kibot_error.log\n')
f.write('\n') f.write('\n')
# Configure all outputs # Configure all outputs
GS.outputs = outputs
for out in outputs: for out in outputs:
config_output(out) config_output(out)
# Get all targets and dependencies # Get all targets and dependencies

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (c) 2021 Salvador E. Tropea # Copyright (c) 2021-2022 Salvador E. Tropea
# Copyright (c) 2021 Instituto Nacional de Tecnología Industrial # Copyright (c) 2021-2022 Instituto Nacional de Tecnología Industrial
# License: GPL-3.0 # License: GPL-3.0
# Project: KiBot (formerly KiPlot) # Project: KiBot (formerly KiPlot)
import re import re
@ -16,6 +16,7 @@ from .gs import GS
from .kiplot import config_output, get_output_dir, run_output from .kiplot import config_output, get_output_dir, run_output
from .misc import MISSING_TOOL, WRONG_INSTALL, W_EMPTYZIP, WRONG_ARGUMENTS, INTERNAL_ERROR from .misc import MISSING_TOOL, WRONG_INSTALL, W_EMPTYZIP, WRONG_ARGUMENTS, INTERNAL_ERROR
from .optionable import Optionable, BaseOptions from .optionable import Optionable, BaseOptions
from .registrable import RegOutput
from .macros import macros, document, output_class # noqa: F401 from .macros import macros, document, output_class # noqa: F401
from . import log from . import log
@ -127,12 +128,11 @@ class CompressOptions(BaseOptions):
# Get the list of candidates # Get the list of candidates
files_list = None files_list = None
if f.from_output: if f.from_output:
for out in GS.outputs: out = RegOutput.get_output(f.from_output)
if out.name == f.from_output: if out is not None:
config_output(out) config_output(out)
files_list = out.get_targets(get_output_dir(out.dir, out, dry=True)) files_list = out.get_targets(get_output_dir(out.dir, out, dry=True))
break else:
if files_list is None:
logger.error('Unknown output `{}` selected in {}'.format(f.from_output, self._parent)) logger.error('Unknown output `{}` selected in {}'.format(f.from_output, self._parent))
exit(WRONG_ARGUMENTS) exit(WRONG_ARGUMENTS)
if not no_out_run: if not no_out_run:

View File

@ -6,9 +6,15 @@
import os import os
from qrcodegen import QrCode from qrcodegen import QrCode
from .gs import GS from .gs import GS
if GS.ki6(): # pragma: no cover (Ki6)
from pcbnew import IU_PER_MM, S_POLYGON, wxPoint, ADD_MODE_APPEND
ADD_APPEND = ADD_MODE_APPEND
else:
from pcbnew import IU_PER_MM, S_POLYGON, wxPoint, ADD_APPEND
from .optionable import BaseOptions, Optionable from .optionable import BaseOptions, Optionable
from .out_base import VariantOptions
from .error import KiPlotConfigurationError from .error import KiPlotConfigurationError
from .kicad.sexpdata import Symbol, dumps, Sep from .kicad.sexpdata import Symbol, dumps, Sep, load, SExpData
from .kicad.v6_sch import DrawRectangleV6, PointXY, Stroke, Fill, SchematicFieldV6, FontEffects from .kicad.v6_sch import DrawRectangleV6, PointXY, Stroke, Fill, SchematicFieldV6, FontEffects
from .macros import macros, document, output_class # noqa: F401 from .macros import macros, document, output_class # noqa: F401
from . import log from . import log
@ -42,6 +48,7 @@ class QRCodeOptions(Optionable):
self.pcb_negative = False self.pcb_negative = False
""" Generate a negative image for the PCB """ """ Generate a negative image for the PCB """
self._unkown_is_error = True self._unkown_is_error = True
self._update_mode = False
def config(self, parent): def config(self, parent):
super().config(parent) super().config(parent)
@ -152,6 +159,34 @@ class QR_LibOptions(BaseOptions):
mod.append(Sep()) mod.append(Sep())
return mod return mod
def qr_draw_fp_memory(self, m, size, size_rect, center, qrc, negative, layer):
""" Create the QR drawings for the board in memory """
for y in range(size):
for x in range(size):
if qrc.get_module(x-negative, y-negative) ^ negative:
x_pos = round(x*size_rect-center, 2)
y_pos = round(y*size_rect-center, 2)
x_pos2 = round(x_pos+size_rect, 2)
y_pos2 = round(y_pos+size_rect, 2)
# Convert to Internal Units
x_pos *= IU_PER_MM
y_pos *= IU_PER_MM
x_pos2 *= IU_PER_MM
y_pos2 *= IU_PER_MM
# Create a PCB polygon
poly = VariantOptions.create_module_element(m)
poly.SetShape(S_POLYGON)
points = []
points.append(wxPoint(x_pos, y_pos))
points.append(wxPoint(x_pos, y_pos2))
points.append(wxPoint(x_pos2, y_pos2))
points.append(wxPoint(x_pos2, y_pos))
poly.SetPolyPoints(points)
poly.SetLayer(layer)
poly.SetWidth(0)
poly.thisown = 0
m.AddNative(poly, ADD_APPEND)
def qr_draw_sym(self, size, size_rect, center, qrc): def qr_draw_sym(self, size, size_rect, center, qrc):
mod = [] mod = []
for y in range(size): for y in range(size):
@ -280,6 +315,53 @@ class QR_LibOptions(BaseOptions):
f.write(dumps(lib)) f.write(dumps(lib))
f.write('\n') f.write('\n')
def update_footprint(self, name, qr):
logger.debug('Updating QR footprint: '+name)
# Compute the size
# TODO: don't repeat
qrc = qr._code_pcb
size = qrc.get_size()
if qr.pcb_negative:
size += 2
full_size = qr.size_pcb * (1 if qr.size_units == 'millimeters' else 25.4)
center = round(full_size/2, 2)
size_rect = round(full_size/size, 2)
# Replace any instance
name = name.lower()
for m in GS.get_modules():
id = m.GetFPID()
m_name = ('{}:{}'.format(id.GetLibNickname(), id.GetLibItemName())).lower()
if name == m_name:
ref = m.GetReference()
logger.debug('- Updating '+ref)
# Remove all the drawings
for gi in m.GraphicalItems():
if gi.GetClass() == 'MGRAPHIC':
m.Remove(gi)
# Add the updated version
self.qr_draw_fp_memory(m, size, size_rect, center, qrc, qr.pcb_negative, GS.board.GetLayerID(qr.layer))
def load_k6_sheet(self, fname):
with open(fname, 'rt') as fh:
error = None
try:
sch = load(fh)
except SExpData as e:
error = str(e)
if error:
raise KiPlotConfigurationError(error)
return sch
def load_k6_sheets(self, fname, sheets={}):
assert GS.sch_file is not None
sheet = self.load_k6_sheet(fname)
sheets[fname] = sheet
if not isinstance(sheet, list) or sheet[0].value() != 'kicad_sch':
raise KiPlotConfigurationError('No kicad_sch signature in '+fname)
for e in sheet[1:]:
if isinstance(e, list) and isinstance(e[0], Symbol) and e[0].value == 'sheet':
logger.error(e)
def run(self, output): def run(self, output):
if self.use_sch_dir: if self.use_sch_dir:
self._odir_sch = GS.sch_dir self._odir_sch = GS.sch_dir
@ -305,6 +387,23 @@ class QR_LibOptions(BaseOptions):
for qr in self.qrs: for qr in self.qrs:
logger.debug('Adding footprint: '+qr.name) logger.debug('Adding footprint: '+qr.name)
self.footprint(dir_pretty, qr) self.footprint(dir_pretty, qr)
# Update the files
if self._parent._update_mode:
# PCB
assert GS.board is not None
for qr in self.qrs:
self.update_footprint(self.lib+':'+qr.name, qr)
bkp = GS.pcb_file+'-bak'
if os.path.isfile(bkp):
os.remove(bkp)
os.rename(GS.pcb_file, bkp)
GS.board.Save(GS.pcb_file)
# Schematic
if GS.ki6():
# KiCad 5 reads the lib, but KiCad 6 is more like the PCB
# sheets = self.load_k6_sheets(GS.sch_file)
pass
# TODO: KiCad 6 is crashing when we delete the graphics
@output_class @output_class

32
kibot/pre_update_qr.py Normal file
View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2020-2022 Salvador E. Tropea
# Copyright (c) 2020-2022 Instituto Nacional de Tecnología Industrial
# License: GPL-3.0
# Project: KiBot (formerly KiPlot)
from .macros import macros, pre_class # noqa: F401
from .error import KiPlotConfigurationError
from .registrable import RegOutput
from .log import get_logger
logger = get_logger(__name__)
@pre_class
class Update_QR(BasePreFlight): # noqa: F821
""" [boolean=false] Update the QR codes.
Complements the `qr_lib` output.
The KiCad 6 files and the KiCad 5 PCB needs manual update, generating a new library isn't enough """
def __init__(self, name, value):
super().__init__(name, value)
if not isinstance(value, bool):
raise KiPlotConfigurationError('must be boolean')
self._enabled = value
self._sch_related = True
self._pcb_related = True
def run(self):
for o in list(RegOutput.get_outputs()): # We convert it to a list because we will mutate the dict
if o.type == 'qr_lib':
RegOutput.make_prioritary(o.name)
o._update_mode = True
logger.debug('Making {} prioritary'.format(o))

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (c) 2020-2021 Salvador E. Tropea # Copyright (c) 2020-2022 Salvador E. Tropea
# Copyright (c) 2020-2021 Instituto Nacional de Tecnología Industrial # Copyright (c) 2020-2022 Instituto Nacional de Tecnología Industrial
# License: GPL-3.0 # License: GPL-3.0
# Project: KiBot (formerly KiPlot) # Project: KiBot (formerly KiPlot)
from collections import OrderedDict from collections import OrderedDict
@ -44,6 +44,8 @@ class RegOutput(Optionable, Registrable):
_def_variants = {} _def_variants = {}
# List of defined outputs # List of defined outputs
_def_outputs = OrderedDict() _def_outputs = OrderedDict()
# List of prioritary outputs
_prio_outputs = OrderedDict()
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -94,10 +96,20 @@ class RegOutput(Optionable, Registrable):
def get_outputs(): def get_outputs():
return RegOutput._def_outputs.values() return RegOutput._def_outputs.values()
@staticmethod
def get_prioritary_outputs():
return RegOutput._prio_outputs.values()
@staticmethod @staticmethod
def get_output(name): def get_output(name):
return RegOutput._def_outputs.get(name, None) return RegOutput._def_outputs.get(name, None)
@staticmethod
def make_prioritary(name):
out = RegOutput._def_outputs[name]
del RegOutput._def_outputs[name]
RegOutput._prio_outputs[name] = out
@staticmethod @staticmethod
def check_variant(variant): def check_variant(variant):
if variant: if variant:

View File

@ -0,0 +1 @@
0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,726 @@
(kicad_pcb (version 20171130) (host pcbnew 5.1.9+dfsg1-1)
(general
(thickness 1.6)
(drawings 0)
(tracks 0)
(zones 0)
(modules 2)
(nets 1)
)
(page A4)
(title_block
(title "QR PCB")
(rev B)
)
(layers
(0 F.Cu signal)
(1 In1.Cu signal hide)
(2 In2.Cu signal hide)
(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.25)
(trace_clearance 0.2)
(zone_clearance 0.508)
(zone_45_only no)
(trace_min 0.2)
(via_size 0.8)
(via_drill 0.4)
(via_min_size 0.4)
(via_min_drill 0.3)
(uvia_size 0.3)
(uvia_drill 0.1)
(uvias_allowed no)
(uvia_min_size 0.2)
(uvia_min_drill 0.1)
(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.524 1.524)
(pad_drill 0.762)
(pad_to_mask_clearance 0)
(aux_axis_origin 0 0)
(visible_elements FFFFFF7F)
(pcbplotparams
(layerselection 0x010fc_ffffffff)
(usegerberextensions false)
(usegerberattributes true)
(usegerberadvancedattributes true)
(creategerberjobfile true)
(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 1)
(scaleselection 1)
(outputdirectory ""))
)
(net 0 "")
(net_class Default "Esta es la clase de red por defecto."
(clearance 0.2)
(trace_width 0.25)
(via_dia 0.8)
(via_drill 0.4)
(uvia_dia 0.3)
(uvia_drill 0.1)
)
(module qr:QR (layer F.Cu) (tedit 0) (tstamp 61D26C5C)
(at 65.8 96.9)
(fp_text reference QR1 (at 0 26.65) (layer F.Cu)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value QR (at 0 -26.65) (layer F.Cu)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_poly (pts (xy 15.74 23) (xy 15.74 25.42) (xy 18.16 25.42) (xy 18.16 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 23) (xy 13.32 25.42) (xy 15.74 25.42) (xy 15.74 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 23) (xy 10.9 25.42) (xy 13.32 25.42) (xy 13.32 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 23) (xy 8.48 25.42) (xy 10.9 25.42) (xy 10.9 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 23) (xy 3.64 25.42) (xy 6.06 25.42) (xy 6.06 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 23) (xy -6.04 25.42) (xy -3.62 25.42) (xy -3.62 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 23) (xy -10.88 25.42) (xy -8.46 25.42) (xy -8.46 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -13.3 23) (xy -13.3 25.42) (xy -10.88 25.42) (xy -10.88 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 23) (xy -15.72 25.42) (xy -13.3 25.42) (xy -13.3 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 23) (xy -18.14 25.42) (xy -15.72 25.42) (xy -15.72 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 23) (xy -20.56 25.42) (xy -18.14 25.42) (xy -18.14 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -22.98 23) (xy -22.98 25.42) (xy -20.56 25.42) (xy -20.56 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 23) (xy -25.4 25.42) (xy -22.98 25.42) (xy -22.98 23)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 20.58) (xy 23 23) (xy 25.42 23) (xy 25.42 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 20.58) (xy 20.58 23) (xy 23 23) (xy 23 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 20.58) (xy 18.16 23) (xy 20.58 23) (xy 20.58 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 20.58) (xy 15.74 23) (xy 18.16 23) (xy 18.16 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 20.58) (xy 13.32 23) (xy 15.74 23) (xy 15.74 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 20.58) (xy 10.9 23) (xy 13.32 23) (xy 13.32 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 20.58) (xy 8.48 23) (xy 10.9 23) (xy 10.9 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 6.06 20.58) (xy 6.06 23) (xy 8.48 23) (xy 8.48 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 20.58) (xy 1.22 23) (xy 3.64 23) (xy 3.64 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 20.58) (xy -1.2 23) (xy 1.22 23) (xy 1.22 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 20.58) (xy -10.88 23) (xy -8.46 23) (xy -8.46 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 20.58) (xy -25.4 23) (xy -22.98 23) (xy -22.98 20.58)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 18.16) (xy 23 20.58) (xy 25.42 20.58) (xy 25.42 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 18.16) (xy 20.58 20.58) (xy 23 20.58) (xy 23 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 18.16) (xy 18.16 20.58) (xy 20.58 20.58) (xy 20.58 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 18.16) (xy 13.32 20.58) (xy 15.74 20.58) (xy 15.74 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 18.16) (xy 10.9 20.58) (xy 13.32 20.58) (xy 13.32 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 18.16) (xy 8.48 20.58) (xy 10.9 20.58) (xy 10.9 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 6.06 18.16) (xy 6.06 20.58) (xy 8.48 20.58) (xy 8.48 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 18.16) (xy 3.64 20.58) (xy 6.06 20.58) (xy 6.06 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 18.16) (xy 1.22 20.58) (xy 3.64 20.58) (xy 3.64 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 18.16) (xy -1.2 20.58) (xy 1.22 20.58) (xy 1.22 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 18.16) (xy -10.88 20.58) (xy -8.46 20.58) (xy -8.46 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 18.16) (xy -15.72 20.58) (xy -13.3 20.58) (xy -13.3 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 18.16) (xy -18.14 20.58) (xy -15.72 20.58) (xy -15.72 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 18.16) (xy -20.56 20.58) (xy -18.14 20.58) (xy -18.14 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 18.16) (xy -25.4 20.58) (xy -22.98 20.58) (xy -22.98 18.16)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 15.74) (xy 18.16 18.16) (xy 20.58 18.16) (xy 20.58 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 15.74) (xy 1.22 18.16) (xy 3.64 18.16) (xy 3.64 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 15.74) (xy -3.62 18.16) (xy -1.2 18.16) (xy -1.2 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 15.74) (xy -6.04 18.16) (xy -3.62 18.16) (xy -3.62 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 15.74) (xy -10.88 18.16) (xy -8.46 18.16) (xy -8.46 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 15.74) (xy -15.72 18.16) (xy -13.3 18.16) (xy -13.3 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 15.74) (xy -18.14 18.16) (xy -15.72 18.16) (xy -15.72 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 15.74) (xy -20.56 18.16) (xy -18.14 18.16) (xy -18.14 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 15.74) (xy -25.4 18.16) (xy -22.98 18.16) (xy -22.98 15.74)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 13.32) (xy 20.58 15.74) (xy 23 15.74) (xy 23 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 13.32) (xy 10.9 15.74) (xy 13.32 15.74) (xy 13.32 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 13.32) (xy 3.64 15.74) (xy 6.06 15.74) (xy 6.06 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 13.32) (xy 1.22 15.74) (xy 3.64 15.74) (xy 3.64 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 13.32) (xy -3.62 15.74) (xy -1.2 15.74) (xy -1.2 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 13.32) (xy -6.04 15.74) (xy -3.62 15.74) (xy -3.62 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 13.32) (xy -10.88 15.74) (xy -8.46 15.74) (xy -8.46 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 13.32) (xy -15.72 15.74) (xy -13.3 15.74) (xy -13.3 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 13.32) (xy -18.14 15.74) (xy -15.72 15.74) (xy -15.72 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 13.32) (xy -20.56 15.74) (xy -18.14 15.74) (xy -18.14 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 13.32) (xy -25.4 15.74) (xy -22.98 15.74) (xy -22.98 13.32)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 10.9) (xy 23 13.32) (xy 25.42 13.32) (xy 25.42 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 10.9) (xy 20.58 13.32) (xy 23 13.32) (xy 23 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 10.9) (xy 18.16 13.32) (xy 20.58 13.32) (xy 20.58 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 10.9) (xy 15.74 13.32) (xy 18.16 13.32) (xy 18.16 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 10.9) (xy 13.32 13.32) (xy 15.74 13.32) (xy 15.74 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 10.9) (xy 8.48 13.32) (xy 10.9 13.32) (xy 10.9 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 10.9) (xy 3.64 13.32) (xy 6.06 13.32) (xy 6.06 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 10.9) (xy -6.04 13.32) (xy -3.62 13.32) (xy -3.62 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 10.9) (xy -10.88 13.32) (xy -8.46 13.32) (xy -8.46 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 10.9) (xy -25.4 13.32) (xy -22.98 13.32) (xy -22.98 10.9)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 8.48) (xy 15.74 10.9) (xy 18.16 10.9) (xy 18.16 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 8.48) (xy 13.32 10.9) (xy 15.74 10.9) (xy 15.74 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 8.48) (xy 10.9 10.9) (xy 13.32 10.9) (xy 13.32 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 8.48) (xy 8.48 10.9) (xy 10.9 10.9) (xy 10.9 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 6.06 8.48) (xy 6.06 10.9) (xy 8.48 10.9) (xy 8.48 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 8.48) (xy 3.64 10.9) (xy 6.06 10.9) (xy 6.06 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 8.48) (xy -3.62 10.9) (xy -1.2 10.9) (xy -1.2 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 8.48) (xy -6.04 10.9) (xy -3.62 10.9) (xy -3.62 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 8.48) (xy -10.88 10.9) (xy -8.46 10.9) (xy -8.46 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -13.3 8.48) (xy -13.3 10.9) (xy -10.88 10.9) (xy -10.88 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 8.48) (xy -15.72 10.9) (xy -13.3 10.9) (xy -13.3 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 8.48) (xy -18.14 10.9) (xy -15.72 10.9) (xy -15.72 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 8.48) (xy -20.56 10.9) (xy -18.14 10.9) (xy -18.14 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -22.98 8.48) (xy -22.98 10.9) (xy -20.56 10.9) (xy -20.56 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 8.48) (xy -25.4 10.9) (xy -22.98 10.9) (xy -22.98 8.48)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 6.06) (xy 20.58 8.48) (xy 23 8.48) (xy 23 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 6.06) (xy 18.16 8.48) (xy 20.58 8.48) (xy 20.58 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 6.06) (xy 15.74 8.48) (xy 18.16 8.48) (xy 18.16 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 6.06) (xy 13.32 8.48) (xy 15.74 8.48) (xy 15.74 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 6.06) (xy 10.9 8.48) (xy 13.32 8.48) (xy 13.32 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 6.06) (xy 8.48 8.48) (xy 10.9 8.48) (xy 10.9 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 6.06 6.06) (xy 6.06 8.48) (xy 8.48 8.48) (xy 8.48 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 6.06) (xy 1.22 8.48) (xy 3.64 8.48) (xy 3.64 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 6.06) (xy -1.2 8.48) (xy 1.22 8.48) (xy 1.22 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 6.06) (xy -3.62 8.48) (xy -1.2 8.48) (xy -1.2 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 6.06) (xy -6.04 8.48) (xy -3.62 8.48) (xy -3.62 6.06)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 3.64) (xy 23 6.06) (xy 25.42 6.06) (xy 25.42 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 3.64) (xy 20.58 6.06) (xy 23 6.06) (xy 23 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 3.64) (xy 15.74 6.06) (xy 18.16 6.06) (xy 18.16 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 3.64) (xy 13.32 6.06) (xy 15.74 6.06) (xy 15.74 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 3.64) (xy 10.9 6.06) (xy 13.32 6.06) (xy 13.32 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 3.64) (xy 3.64 6.06) (xy 6.06 6.06) (xy 6.06 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 3.64) (xy -1.2 6.06) (xy 1.22 6.06) (xy 1.22 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -8.46 3.64) (xy -8.46 6.06) (xy -6.04 6.06) (xy -6.04 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 3.64) (xy -10.88 6.06) (xy -8.46 6.06) (xy -8.46 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -22.98 3.64) (xy -22.98 6.06) (xy -20.56 6.06) (xy -20.56 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 3.64) (xy -25.4 6.06) (xy -22.98 6.06) (xy -22.98 3.64)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 1.22) (xy 23 3.64) (xy 25.42 3.64) (xy 25.42 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 1.22) (xy 18.16 3.64) (xy 20.58 3.64) (xy 20.58 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 1.22) (xy 13.32 3.64) (xy 15.74 3.64) (xy 15.74 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 1.22) (xy 10.9 3.64) (xy 13.32 3.64) (xy 13.32 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 1.22) (xy 3.64 3.64) (xy 6.06 3.64) (xy 6.06 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 1.22) (xy 1.22 3.64) (xy 3.64 3.64) (xy 3.64 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 1.22) (xy -1.2 3.64) (xy 1.22 3.64) (xy 1.22 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 1.22) (xy -3.62 3.64) (xy -1.2 3.64) (xy -1.2 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -8.46 1.22) (xy -8.46 3.64) (xy -6.04 3.64) (xy -6.04 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 1.22) (xy -15.72 3.64) (xy -13.3 3.64) (xy -13.3 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 1.22) (xy -18.14 3.64) (xy -15.72 3.64) (xy -15.72 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 1.22) (xy -20.56 3.64) (xy -18.14 3.64) (xy -18.14 1.22)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -1.2) (xy 23 1.22) (xy 25.42 1.22) (xy 25.42 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 -1.2) (xy 20.58 1.22) (xy 23 1.22) (xy 23 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 -1.2) (xy 10.9 1.22) (xy 13.32 1.22) (xy 13.32 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -1.2) (xy 8.48 1.22) (xy 10.9 1.22) (xy 10.9 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 -1.2) (xy 3.64 1.22) (xy 6.06 1.22) (xy 6.06 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 -1.2) (xy 1.22 1.22) (xy 3.64 1.22) (xy 3.64 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -1.2) (xy -6.04 1.22) (xy -3.62 1.22) (xy -3.62 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -8.46 -1.2) (xy -8.46 1.22) (xy -6.04 1.22) (xy -6.04 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -1.2) (xy -10.88 1.22) (xy -8.46 1.22) (xy -8.46 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 -1.2) (xy -20.56 1.22) (xy -18.14 1.22) (xy -18.14 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -1.2) (xy -25.4 1.22) (xy -22.98 1.22) (xy -22.98 -1.2)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 -3.62) (xy 15.74 -1.2) (xy 18.16 -1.2) (xy 18.16 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -3.62) (xy 8.48 -1.2) (xy 10.9 -1.2) (xy 10.9 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 -3.62) (xy 3.64 -1.2) (xy 6.06 -1.2) (xy 6.06 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 -3.62) (xy -1.2 -1.2) (xy 1.22 -1.2) (xy 1.22 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -3.62) (xy -6.04 -1.2) (xy -3.62 -1.2) (xy -3.62 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -8.46 -3.62) (xy -8.46 -1.2) (xy -6.04 -1.2) (xy -6.04 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -13.3 -3.62) (xy -13.3 -1.2) (xy -10.88 -1.2) (xy -10.88 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 -3.62) (xy -15.72 -1.2) (xy -13.3 -1.2) (xy -13.3 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 -3.62) (xy -20.56 -1.2) (xy -18.14 -1.2) (xy -18.14 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -22.98 -3.62) (xy -22.98 -1.2) (xy -20.56 -1.2) (xy -20.56 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -3.62) (xy -25.4 -1.2) (xy -22.98 -1.2) (xy -22.98 -3.62)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -6.04) (xy 23 -3.62) (xy 25.42 -3.62) (xy 25.42 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 -6.04) (xy 20.58 -3.62) (xy 23 -3.62) (xy 23 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 -6.04) (xy 18.16 -3.62) (xy 20.58 -3.62) (xy 20.58 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 -6.04) (xy 13.32 -3.62) (xy 15.74 -3.62) (xy 15.74 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 6.06 -6.04) (xy 6.06 -3.62) (xy 8.48 -3.62) (xy 8.48 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 -6.04) (xy 1.22 -3.62) (xy 3.64 -3.62) (xy 3.64 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -6.04) (xy -6.04 -3.62) (xy -3.62 -3.62) (xy -3.62 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -8.46 -6.04) (xy -8.46 -3.62) (xy -6.04 -3.62) (xy -6.04 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -6.04) (xy -10.88 -3.62) (xy -8.46 -3.62) (xy -8.46 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -13.3 -6.04) (xy -13.3 -3.62) (xy -10.88 -3.62) (xy -10.88 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 -6.04) (xy -15.72 -3.62) (xy -13.3 -3.62) (xy -13.3 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 -6.04) (xy -18.14 -3.62) (xy -15.72 -3.62) (xy -15.72 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -6.04) (xy -25.4 -3.62) (xy -22.98 -3.62) (xy -22.98 -6.04)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 -8.46) (xy -1.2 -6.04) (xy 1.22 -6.04) (xy 1.22 -8.46)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 -8.46) (xy -3.62 -6.04) (xy -1.2 -6.04) (xy -1.2 -8.46)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -10.88) (xy 23 -8.46) (xy 25.42 -8.46) (xy 25.42 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 -10.88) (xy 20.58 -8.46) (xy 23 -8.46) (xy 23 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 -10.88) (xy 18.16 -8.46) (xy 20.58 -8.46) (xy 20.58 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 -10.88) (xy 15.74 -8.46) (xy 18.16 -8.46) (xy 18.16 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 -10.88) (xy 13.32 -8.46) (xy 15.74 -8.46) (xy 15.74 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 -10.88) (xy 10.9 -8.46) (xy 13.32 -8.46) (xy 13.32 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -10.88) (xy 8.48 -8.46) (xy 10.9 -8.46) (xy 10.9 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 -10.88) (xy 3.64 -8.46) (xy 6.06 -8.46) (xy 6.06 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 -10.88) (xy -1.2 -8.46) (xy 1.22 -8.46) (xy 1.22 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -10.88) (xy -6.04 -8.46) (xy -3.62 -8.46) (xy -3.62 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -10.88) (xy -10.88 -8.46) (xy -8.46 -8.46) (xy -8.46 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -13.3 -10.88) (xy -13.3 -8.46) (xy -10.88 -8.46) (xy -10.88 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 -10.88) (xy -15.72 -8.46) (xy -13.3 -8.46) (xy -13.3 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 -10.88) (xy -18.14 -8.46) (xy -15.72 -8.46) (xy -15.72 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 -10.88) (xy -20.56 -8.46) (xy -18.14 -8.46) (xy -18.14 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -22.98 -10.88) (xy -22.98 -8.46) (xy -20.56 -8.46) (xy -20.56 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -10.88) (xy -25.4 -8.46) (xy -22.98 -8.46) (xy -22.98 -10.88)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -13.3) (xy 23 -10.88) (xy 25.42 -10.88) (xy 25.42 -13.3)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -13.3) (xy 8.48 -10.88) (xy 10.9 -10.88) (xy 10.9 -13.3)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 -13.3) (xy -1.2 -10.88) (xy 1.22 -10.88) (xy 1.22 -13.3)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 -13.3) (xy -3.62 -10.88) (xy -1.2 -10.88) (xy -1.2 -13.3)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -13.3) (xy -10.88 -10.88) (xy -8.46 -10.88) (xy -8.46 -13.3)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -13.3) (xy -25.4 -10.88) (xy -22.98 -10.88) (xy -22.98 -13.3)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -15.72) (xy 23 -13.3) (xy 25.42 -13.3) (xy 25.42 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 -15.72) (xy 18.16 -13.3) (xy 20.58 -13.3) (xy 20.58 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 -15.72) (xy 15.74 -13.3) (xy 18.16 -13.3) (xy 18.16 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 -15.72) (xy 13.32 -13.3) (xy 15.74 -13.3) (xy 15.74 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -15.72) (xy 8.48 -13.3) (xy 10.9 -13.3) (xy 10.9 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 -15.72) (xy 3.64 -13.3) (xy 6.06 -13.3) (xy 6.06 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 -15.72) (xy 1.22 -13.3) (xy 3.64 -13.3) (xy 3.64 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -15.72) (xy -6.04 -13.3) (xy -3.62 -13.3) (xy -3.62 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -15.72) (xy -10.88 -13.3) (xy -8.46 -13.3) (xy -8.46 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 -15.72) (xy -15.72 -13.3) (xy -13.3 -13.3) (xy -13.3 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 -15.72) (xy -18.14 -13.3) (xy -15.72 -13.3) (xy -15.72 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 -15.72) (xy -20.56 -13.3) (xy -18.14 -13.3) (xy -18.14 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -15.72) (xy -25.4 -13.3) (xy -22.98 -13.3) (xy -22.98 -15.72)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -18.14) (xy 23 -15.72) (xy 25.42 -15.72) (xy 25.42 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 -18.14) (xy 18.16 -15.72) (xy 20.58 -15.72) (xy 20.58 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 -18.14) (xy 15.74 -15.72) (xy 18.16 -15.72) (xy 18.16 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 -18.14) (xy 13.32 -15.72) (xy 15.74 -15.72) (xy 15.74 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -18.14) (xy 8.48 -15.72) (xy 10.9 -15.72) (xy 10.9 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 -18.14) (xy -1.2 -15.72) (xy 1.22 -15.72) (xy 1.22 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -18.14) (xy -10.88 -15.72) (xy -8.46 -15.72) (xy -8.46 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 -18.14) (xy -15.72 -15.72) (xy -13.3 -15.72) (xy -13.3 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 -18.14) (xy -18.14 -15.72) (xy -15.72 -15.72) (xy -15.72 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 -18.14) (xy -20.56 -15.72) (xy -18.14 -15.72) (xy -18.14 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -18.14) (xy -25.4 -15.72) (xy -22.98 -15.72) (xy -22.98 -18.14)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -20.56) (xy 23 -18.14) (xy 25.42 -18.14) (xy 25.42 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 -20.56) (xy 18.16 -18.14) (xy 20.58 -18.14) (xy 20.58 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 -20.56) (xy 15.74 -18.14) (xy 18.16 -18.14) (xy 18.16 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 -20.56) (xy 13.32 -18.14) (xy 15.74 -18.14) (xy 15.74 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -20.56) (xy 8.48 -18.14) (xy 10.9 -18.14) (xy 10.9 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 -20.56) (xy 3.64 -18.14) (xy 6.06 -18.14) (xy 6.06 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 -20.56) (xy 1.22 -18.14) (xy 3.64 -18.14) (xy 3.64 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 -20.56) (xy -1.2 -18.14) (xy 1.22 -18.14) (xy 1.22 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -20.56) (xy -6.04 -18.14) (xy -3.62 -18.14) (xy -3.62 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -20.56) (xy -10.88 -18.14) (xy -8.46 -18.14) (xy -8.46 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 -20.56) (xy -15.72 -18.14) (xy -13.3 -18.14) (xy -13.3 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 -20.56) (xy -18.14 -18.14) (xy -15.72 -18.14) (xy -15.72 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 -20.56) (xy -20.56 -18.14) (xy -18.14 -18.14) (xy -18.14 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -20.56) (xy -25.4 -18.14) (xy -22.98 -18.14) (xy -22.98 -20.56)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -22.98) (xy 23 -20.56) (xy 25.42 -20.56) (xy 25.42 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -22.98) (xy 8.48 -20.56) (xy 10.9 -20.56) (xy 10.9 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 -22.98) (xy 3.64 -20.56) (xy 6.06 -20.56) (xy 6.06 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 1.22 -22.98) (xy 1.22 -20.56) (xy 3.64 -20.56) (xy 3.64 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -3.62 -22.98) (xy -3.62 -20.56) (xy -1.2 -20.56) (xy -1.2 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -22.98) (xy -6.04 -20.56) (xy -3.62 -20.56) (xy -3.62 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -22.98) (xy -10.88 -20.56) (xy -8.46 -20.56) (xy -8.46 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -22.98) (xy -25.4 -20.56) (xy -22.98 -20.56) (xy -22.98 -22.98)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 23 -25.4) (xy 23 -22.98) (xy 25.42 -22.98) (xy 25.42 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 20.58 -25.4) (xy 20.58 -22.98) (xy 23 -22.98) (xy 23 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 18.16 -25.4) (xy 18.16 -22.98) (xy 20.58 -22.98) (xy 20.58 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 15.74 -25.4) (xy 15.74 -22.98) (xy 18.16 -22.98) (xy 18.16 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 13.32 -25.4) (xy 13.32 -22.98) (xy 15.74 -22.98) (xy 15.74 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 10.9 -25.4) (xy 10.9 -22.98) (xy 13.32 -22.98) (xy 13.32 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 8.48 -25.4) (xy 8.48 -22.98) (xy 10.9 -22.98) (xy 10.9 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy 3.64 -25.4) (xy 3.64 -22.98) (xy 6.06 -22.98) (xy 6.06 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -1.2 -25.4) (xy -1.2 -22.98) (xy 1.22 -22.98) (xy 1.22 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -6.04 -25.4) (xy -6.04 -22.98) (xy -3.62 -22.98) (xy -3.62 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -10.88 -25.4) (xy -10.88 -22.98) (xy -8.46 -22.98) (xy -8.46 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -13.3 -25.4) (xy -13.3 -22.98) (xy -10.88 -22.98) (xy -10.88 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -15.72 -25.4) (xy -15.72 -22.98) (xy -13.3 -22.98) (xy -13.3 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -18.14 -25.4) (xy -18.14 -22.98) (xy -15.72 -22.98) (xy -15.72 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -20.56 -25.4) (xy -20.56 -22.98) (xy -18.14 -22.98) (xy -18.14 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -22.98 -25.4) (xy -22.98 -22.98) (xy -20.56 -22.98) (xy -20.56 -25.4)) (layer F.Cu) (width 0))
(fp_poly (pts (xy -25.4 -25.4) (xy -25.4 -22.98) (xy -22.98 -22.98) (xy -22.98 -25.4)) (layer F.Cu) (width 0))
(fp_text user "bogus 1 2 3 4" (at 0 -35.15) (layer F.Cu) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_mask: 6" (at 0 -33.45) (layer F.Cu) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_ecc: 1,0" (at 0 -31.75) (layer F.Cu) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_size: 21" (at 0 -30.05) (layer F.Cu) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_version: 1" (at 0 -28.35) (layer F.Cu) hide
(effects (font (size 1 1) (thickness 0.15)))
)
)
(module qr:QR2 (layer F.Cu) (tedit 0) (tstamp 61D27619)
(at 101.1 79)
(fp_text reference QR2 (at 0 8.75) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value QR2 (at 0 -8.75) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_poly (pts (xy -7.5 -7.5) (xy -7.5 -6.9) (xy -6.9 -6.9) (xy -6.9 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.9 -7.5) (xy -6.9 -6.9) (xy -6.3 -6.9) (xy -6.3 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -7.5) (xy -6.3 -6.9) (xy -5.7 -6.9) (xy -5.7 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 -7.5) (xy -5.7 -6.9) (xy -5.1 -6.9) (xy -5.1 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -7.5) (xy -5.1 -6.9) (xy -4.5 -6.9) (xy -4.5 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -4.5 -7.5) (xy -4.5 -6.9) (xy -3.9 -6.9) (xy -3.9 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -7.5) (xy -3.9 -6.9) (xy -3.3 -6.9) (xy -3.3 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -7.5) (xy -2.7 -6.9) (xy -2.1 -6.9) (xy -2.1 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 -7.5) (xy -1.5 -6.9) (xy -0.9 -6.9) (xy -0.9 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 -7.5) (xy -0.9 -6.9) (xy -0.3 -6.9) (xy -0.3 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 -7.5) (xy -0.3 -6.9) (xy 0.3 -6.9) (xy 0.3 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -7.5) (xy 0.3 -6.9) (xy 0.9 -6.9) (xy 0.9 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -7.5) (xy 0.9 -6.9) (xy 1.5 -6.9) (xy 1.5 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -7.5) (xy 3.3 -6.9) (xy 3.9 -6.9) (xy 3.9 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.9 -7.5) (xy 3.9 -6.9) (xy 4.5 -6.9) (xy 4.5 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 -7.5) (xy 4.5 -6.9) (xy 5.1 -6.9) (xy 5.1 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 -7.5) (xy 5.1 -6.9) (xy 5.7 -6.9) (xy 5.7 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -7.5) (xy 5.7 -6.9) (xy 6.3 -6.9) (xy 6.3 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 -7.5) (xy 6.3 -6.9) (xy 6.9 -6.9) (xy 6.9 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -7.5) (xy 6.9 -6.9) (xy 7.5 -6.9) (xy 7.5 -7.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -6.9) (xy -7.5 -6.3) (xy -6.9 -6.3) (xy -6.9 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -6.9) (xy -3.9 -6.3) (xy -3.3 -6.3) (xy -3.3 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -6.9) (xy -2.7 -6.3) (xy -2.1 -6.3) (xy -2.1 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 -6.9) (xy -2.1 -6.3) (xy -1.5 -6.3) (xy -1.5 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -6.9) (xy 0.3 -6.3) (xy 0.9 -6.3) (xy 0.9 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -6.9) (xy 0.9 -6.3) (xy 1.5 -6.3) (xy 1.5 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 -6.9) (xy 1.5 -6.3) (xy 2.1 -6.3) (xy 2.1 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 -6.9) (xy 2.1 -6.3) (xy 2.7 -6.3) (xy 2.7 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -6.9) (xy 3.3 -6.3) (xy 3.9 -6.3) (xy 3.9 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -6.9) (xy 6.9 -6.3) (xy 7.5 -6.3) (xy 7.5 -6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -6.3) (xy -7.5 -5.7) (xy -6.9 -5.7) (xy -6.9 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -6.3) (xy -6.3 -5.7) (xy -5.7 -5.7) (xy -5.7 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 -6.3) (xy -5.7 -5.7) (xy -5.1 -5.7) (xy -5.1 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -6.3) (xy -5.1 -5.7) (xy -4.5 -5.7) (xy -4.5 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -6.3) (xy -3.9 -5.7) (xy -3.3 -5.7) (xy -3.3 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -6.3) (xy -2.7 -5.7) (xy -2.1 -5.7) (xy -2.1 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -6.3) (xy 0.9 -5.7) (xy 1.5 -5.7) (xy 1.5 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 -6.3) (xy 2.1 -5.7) (xy 2.7 -5.7) (xy 2.7 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -6.3) (xy 3.3 -5.7) (xy 3.9 -5.7) (xy 3.9 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 -6.3) (xy 4.5 -5.7) (xy 5.1 -5.7) (xy 5.1 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 -6.3) (xy 5.1 -5.7) (xy 5.7 -5.7) (xy 5.7 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -6.3) (xy 5.7 -5.7) (xy 6.3 -5.7) (xy 6.3 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -6.3) (xy 6.9 -5.7) (xy 7.5 -5.7) (xy 7.5 -6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -5.7) (xy -7.5 -5.1) (xy -6.9 -5.1) (xy -6.9 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -5.7) (xy -6.3 -5.1) (xy -5.7 -5.1) (xy -5.7 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 -5.7) (xy -5.7 -5.1) (xy -5.1 -5.1) (xy -5.1 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -5.7) (xy -5.1 -5.1) (xy -4.5 -5.1) (xy -4.5 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -5.7) (xy -3.9 -5.1) (xy -3.3 -5.1) (xy -3.3 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 -5.7) (xy -2.1 -5.1) (xy -1.5 -5.1) (xy -1.5 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 -5.7) (xy -0.9 -5.1) (xy -0.3 -5.1) (xy -0.3 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 -5.7) (xy -0.3 -5.1) (xy 0.3 -5.1) (xy 0.3 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 -5.7) (xy 1.5 -5.1) (xy 2.1 -5.1) (xy 2.1 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -5.7) (xy 3.3 -5.1) (xy 3.9 -5.1) (xy 3.9 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 -5.7) (xy 4.5 -5.1) (xy 5.1 -5.1) (xy 5.1 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 -5.7) (xy 5.1 -5.1) (xy 5.7 -5.1) (xy 5.7 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -5.7) (xy 5.7 -5.1) (xy 6.3 -5.1) (xy 6.3 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -5.7) (xy 6.9 -5.1) (xy 7.5 -5.1) (xy 7.5 -5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -5.1) (xy -7.5 -4.5) (xy -6.9 -4.5) (xy -6.9 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -5.1) (xy -6.3 -4.5) (xy -5.7 -4.5) (xy -5.7 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 -5.1) (xy -5.7 -4.5) (xy -5.1 -4.5) (xy -5.1 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -5.1) (xy -5.1 -4.5) (xy -4.5 -4.5) (xy -4.5 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -5.1) (xy -3.9 -4.5) (xy -3.3 -4.5) (xy -3.3 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 -5.1) (xy -1.5 -4.5) (xy -0.9 -4.5) (xy -0.9 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 -5.1) (xy -0.9 -4.5) (xy -0.3 -4.5) (xy -0.3 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 -5.1) (xy -0.3 -4.5) (xy 0.3 -4.5) (xy 0.3 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -5.1) (xy 0.3 -4.5) (xy 0.9 -4.5) (xy 0.9 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -5.1) (xy 0.9 -4.5) (xy 1.5 -4.5) (xy 1.5 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 -5.1) (xy 2.1 -4.5) (xy 2.7 -4.5) (xy 2.7 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -5.1) (xy 3.3 -4.5) (xy 3.9 -4.5) (xy 3.9 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 -5.1) (xy 4.5 -4.5) (xy 5.1 -4.5) (xy 5.1 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 -5.1) (xy 5.1 -4.5) (xy 5.7 -4.5) (xy 5.7 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -5.1) (xy 5.7 -4.5) (xy 6.3 -4.5) (xy 6.3 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -5.1) (xy 6.9 -4.5) (xy 7.5 -4.5) (xy 7.5 -5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -4.5) (xy -7.5 -3.9) (xy -6.9 -3.9) (xy -6.9 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -4.5) (xy -3.9 -3.9) (xy -3.3 -3.9) (xy -3.3 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -4.5) (xy -2.7 -3.9) (xy -2.1 -3.9) (xy -2.1 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 -4.5) (xy -2.1 -3.9) (xy -1.5 -3.9) (xy -1.5 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 -4.5) (xy -1.5 -3.9) (xy -0.9 -3.9) (xy -0.9 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -4.5) (xy 0.3 -3.9) (xy 0.9 -3.9) (xy 0.9 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -4.5) (xy 0.9 -3.9) (xy 1.5 -3.9) (xy 1.5 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 -4.5) (xy 2.1 -3.9) (xy 2.7 -3.9) (xy 2.7 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -4.5) (xy 3.3 -3.9) (xy 3.9 -3.9) (xy 3.9 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -4.5) (xy 6.9 -3.9) (xy 7.5 -3.9) (xy 7.5 -4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -3.9) (xy -7.5 -3.3) (xy -6.9 -3.3) (xy -6.9 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.9 -3.9) (xy -6.9 -3.3) (xy -6.3 -3.3) (xy -6.3 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -3.9) (xy -6.3 -3.3) (xy -5.7 -3.3) (xy -5.7 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 -3.9) (xy -5.7 -3.3) (xy -5.1 -3.3) (xy -5.1 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -3.9) (xy -5.1 -3.3) (xy -4.5 -3.3) (xy -4.5 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -4.5 -3.9) (xy -4.5 -3.3) (xy -3.9 -3.3) (xy -3.9 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -3.9) (xy -3.9 -3.3) (xy -3.3 -3.3) (xy -3.3 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -3.9) (xy -2.7 -3.3) (xy -2.1 -3.3) (xy -2.1 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 -3.9) (xy -1.5 -3.3) (xy -0.9 -3.3) (xy -0.9 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 -3.9) (xy -0.3 -3.3) (xy 0.3 -3.3) (xy 0.3 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -3.9) (xy 0.9 -3.3) (xy 1.5 -3.3) (xy 1.5 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 -3.9) (xy 2.1 -3.3) (xy 2.7 -3.3) (xy 2.7 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -3.9) (xy 3.3 -3.3) (xy 3.9 -3.3) (xy 3.9 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.9 -3.9) (xy 3.9 -3.3) (xy 4.5 -3.3) (xy 4.5 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 -3.9) (xy 4.5 -3.3) (xy 5.1 -3.3) (xy 5.1 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 -3.9) (xy 5.1 -3.3) (xy 5.7 -3.3) (xy 5.7 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -3.9) (xy 5.7 -3.3) (xy 6.3 -3.3) (xy 6.3 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 -3.9) (xy 6.3 -3.3) (xy 6.9 -3.3) (xy 6.9 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -3.9) (xy 6.9 -3.3) (xy 7.5 -3.3) (xy 7.5 -3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -3.3) (xy -2.7 -2.7) (xy -2.1 -2.7) (xy -2.1 -3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 -3.3) (xy -0.3 -2.7) (xy 0.3 -2.7) (xy 0.3 -3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -3.3) (xy 0.3 -2.7) (xy 0.9 -2.7) (xy 0.9 -3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -3.3) (xy 0.9 -2.7) (xy 1.5 -2.7) (xy 1.5 -3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 -3.3) (xy 1.5 -2.7) (xy 2.1 -2.7) (xy 2.1 -3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 -3.3) (xy 2.1 -2.7) (xy 2.7 -2.7) (xy 2.7 -3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -2.7) (xy -6.3 -2.1) (xy -5.7 -2.1) (xy -5.7 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 -2.7) (xy -5.7 -2.1) (xy -5.1 -2.1) (xy -5.1 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -2.7) (xy -5.1 -2.1) (xy -4.5 -2.1) (xy -4.5 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -2.7) (xy -3.9 -2.1) (xy -3.3 -2.1) (xy -3.3 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -2.7) (xy -2.7 -2.1) (xy -2.1 -2.1) (xy -2.1 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 -2.7) (xy -2.1 -2.1) (xy -1.5 -2.1) (xy -1.5 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -2.7) (xy 0.3 -2.1) (xy 0.9 -2.1) (xy 0.9 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 -2.7) (xy 1.5 -2.1) (xy 2.1 -2.1) (xy 2.1 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.7 -2.7) (xy 2.7 -2.1) (xy 3.3 -2.1) (xy 3.3 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -2.7) (xy 3.3 -2.1) (xy 3.9 -2.1) (xy 3.9 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.9 -2.7) (xy 3.9 -2.1) (xy 4.5 -2.1) (xy 4.5 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -2.7) (xy 5.7 -2.1) (xy 6.3 -2.1) (xy 6.3 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 -2.7) (xy 6.3 -2.1) (xy 6.9 -2.1) (xy 6.9 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -2.7) (xy 6.9 -2.1) (xy 7.5 -2.1) (xy 7.5 -2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -2.1) (xy -7.5 -1.5) (xy -6.9 -1.5) (xy -6.9 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -2.1) (xy -6.3 -1.5) (xy -5.7 -1.5) (xy -5.7 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -2.1) (xy -5.1 -1.5) (xy -4.5 -1.5) (xy -4.5 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -4.5 -2.1) (xy -4.5 -1.5) (xy -3.9 -1.5) (xy -3.9 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.3 -2.1) (xy -3.3 -1.5) (xy -2.7 -1.5) (xy -2.7 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -2.1) (xy -2.7 -1.5) (xy -2.1 -1.5) (xy -2.1 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 -2.1) (xy -2.1 -1.5) (xy -1.5 -1.5) (xy -1.5 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 -2.1) (xy -1.5 -1.5) (xy -0.9 -1.5) (xy -0.9 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 -2.1) (xy -0.9 -1.5) (xy -0.3 -1.5) (xy -0.3 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -2.1) (xy 0.3 -1.5) (xy 0.9 -1.5) (xy 0.9 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -2.1) (xy 0.9 -1.5) (xy 1.5 -1.5) (xy 1.5 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 -2.1) (xy 2.1 -1.5) (xy 2.7 -1.5) (xy 2.7 -2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -1.5) (xy -3.9 -0.9) (xy -3.3 -0.9) (xy -3.3 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.3 -1.5) (xy -3.3 -0.9) (xy -2.7 -0.9) (xy -2.7 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -1.5) (xy -2.7 -0.9) (xy -2.1 -0.9) (xy -2.1 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 -1.5) (xy -1.5 -0.9) (xy -0.9 -0.9) (xy -0.9 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 -1.5) (xy -0.9 -0.9) (xy -0.3 -0.9) (xy -0.3 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -1.5) (xy 0.3 -0.9) (xy 0.9 -0.9) (xy 0.9 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -1.5) (xy 0.9 -0.9) (xy 1.5 -0.9) (xy 1.5 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 -1.5) (xy 1.5 -0.9) (xy 2.1 -0.9) (xy 2.1 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -1.5) (xy 3.3 -0.9) (xy 3.9 -0.9) (xy 3.9 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 -1.5) (xy 4.5 -0.9) (xy 5.1 -0.9) (xy 5.1 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -1.5) (xy 5.7 -0.9) (xy 6.3 -0.9) (xy 6.3 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 -1.5) (xy 6.3 -0.9) (xy 6.9 -0.9) (xy 6.9 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 -1.5) (xy 6.9 -0.9) (xy 7.5 -0.9) (xy 7.5 -1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 -0.9) (xy -7.5 -0.3) (xy -6.9 -0.3) (xy -6.9 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.9 -0.9) (xy -6.9 -0.3) (xy -6.3 -0.3) (xy -6.3 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 -0.9) (xy -5.7 -0.3) (xy -5.1 -0.3) (xy -5.1 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -4.5 -0.9) (xy -4.5 -0.3) (xy -3.9 -0.3) (xy -3.9 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 -0.9) (xy -2.1 -0.3) (xy -1.5 -0.3) (xy -1.5 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 -0.9) (xy -1.5 -0.3) (xy -0.9 -0.3) (xy -0.9 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 -0.9) (xy -0.3 -0.3) (xy 0.3 -0.3) (xy 0.3 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 -0.9) (xy 0.3 -0.3) (xy 0.9 -0.3) (xy 0.9 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 -0.9) (xy 1.5 -0.3) (xy 2.1 -0.3) (xy 2.1 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -0.9) (xy 3.3 -0.3) (xy 3.9 -0.3) (xy 3.9 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 -0.9) (xy 6.3 -0.3) (xy 6.9 -0.3) (xy 6.9 -0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.9 -0.3) (xy -6.9 0.3) (xy -6.3 0.3) (xy -6.3 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 -0.3) (xy -6.3 0.3) (xy -5.7 0.3) (xy -5.7 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 -0.3) (xy -5.1 0.3) (xy -4.5 0.3) (xy -4.5 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 -0.3) (xy -3.9 0.3) (xy -3.3 0.3) (xy -3.3 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 -0.3) (xy -2.7 0.3) (xy -2.1 0.3) (xy -2.1 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 -0.3) (xy -2.1 0.3) (xy -1.5 0.3) (xy -1.5 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 -0.3) (xy -0.9 0.3) (xy -0.3 0.3) (xy -0.3 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 -0.3) (xy -0.3 0.3) (xy 0.3 0.3) (xy 0.3 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 -0.3) (xy 0.9 0.3) (xy 1.5 0.3) (xy 1.5 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 -0.3) (xy 3.3 0.3) (xy 3.9 0.3) (xy 3.9 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.9 -0.3) (xy 3.9 0.3) (xy 4.5 0.3) (xy 4.5 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 -0.3) (xy 4.5 0.3) (xy 5.1 0.3) (xy 5.1 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 -0.3) (xy 5.7 0.3) (xy 6.3 0.3) (xy 6.3 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 -0.3) (xy 6.3 0.3) (xy 6.9 0.3) (xy 6.9 -0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 0.3) (xy -7.5 0.9) (xy -6.9 0.9) (xy -6.9 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 0.3) (xy -5.1 0.9) (xy -4.5 0.9) (xy -4.5 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 0.3) (xy -1.5 0.9) (xy -0.9 0.9) (xy -0.9 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 0.3) (xy 0.3 0.9) (xy 0.9 0.9) (xy 0.9 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 0.3) (xy 0.9 0.9) (xy 1.5 0.9) (xy 1.5 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 0.3) (xy 1.5 0.9) (xy 2.1 0.9) (xy 2.1 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 0.3) (xy 2.1 0.9) (xy 2.7 0.9) (xy 2.7 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.7 0.3) (xy 2.7 0.9) (xy 3.3 0.9) (xy 3.3 0.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 0.9) (xy -7.5 1.5) (xy -6.9 1.5) (xy -6.9 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 0.9) (xy -6.3 1.5) (xy -5.7 1.5) (xy -5.7 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 0.9) (xy -5.7 1.5) (xy -5.1 1.5) (xy -5.1 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 0.9) (xy -3.9 1.5) (xy -3.3 1.5) (xy -3.3 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.3 0.9) (xy -3.3 1.5) (xy -2.7 1.5) (xy -2.7 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 0.9) (xy -2.7 1.5) (xy -2.1 1.5) (xy -2.1 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 0.9) (xy -2.1 1.5) (xy -1.5 1.5) (xy -1.5 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 0.9) (xy -1.5 1.5) (xy -0.9 1.5) (xy -0.9 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 0.9) (xy -0.3 1.5) (xy 0.3 1.5) (xy 0.3 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 0.9) (xy 0.3 1.5) (xy 0.9 1.5) (xy 0.9 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 0.9) (xy 3.3 1.5) (xy 3.9 1.5) (xy 3.9 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 0.9) (xy 6.3 1.5) (xy 6.9 1.5) (xy 6.9 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 0.9) (xy 6.9 1.5) (xy 7.5 1.5) (xy 7.5 0.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 1.5) (xy -7.5 2.1) (xy -6.9 2.1) (xy -6.9 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 1.5) (xy -6.3 2.1) (xy -5.7 2.1) (xy -5.7 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 1.5) (xy -5.1 2.1) (xy -4.5 2.1) (xy -4.5 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -4.5 1.5) (xy -4.5 2.1) (xy -3.9 2.1) (xy -3.9 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.3 1.5) (xy -3.3 2.1) (xy -2.7 2.1) (xy -2.7 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 1.5) (xy -1.5 2.1) (xy -0.9 2.1) (xy -0.9 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 1.5) (xy -0.9 2.1) (xy -0.3 2.1) (xy -0.3 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 1.5) (xy 0.3 2.1) (xy 0.9 2.1) (xy 0.9 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 1.5) (xy 2.1 2.1) (xy 2.7 2.1) (xy 2.7 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.7 1.5) (xy 2.7 2.1) (xy 3.3 2.1) (xy 3.3 1.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 2.1) (xy -7.5 2.7) (xy -6.9 2.7) (xy -6.9 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 2.1) (xy -6.3 2.7) (xy -5.7 2.7) (xy -5.7 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 2.1) (xy -5.7 2.7) (xy -5.1 2.7) (xy -5.1 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 2.1) (xy -3.9 2.7) (xy -3.3 2.7) (xy -3.3 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.3 2.1) (xy -3.3 2.7) (xy -2.7 2.7) (xy -2.7 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 2.1) (xy 0.3 2.7) (xy 0.9 2.7) (xy 0.9 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 2.1) (xy 0.9 2.7) (xy 1.5 2.7) (xy 1.5 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 2.1) (xy 2.1 2.7) (xy 2.7 2.7) (xy 2.7 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.7 2.1) (xy 2.7 2.7) (xy 3.3 2.7) (xy 3.3 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 2.1) (xy 3.3 2.7) (xy 3.9 2.7) (xy 3.9 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.9 2.1) (xy 3.9 2.7) (xy 4.5 2.7) (xy 4.5 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 2.1) (xy 4.5 2.7) (xy 5.1 2.7) (xy 5.1 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 2.1) (xy 5.7 2.7) (xy 6.3 2.7) (xy 6.3 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 2.1) (xy 6.9 2.7) (xy 7.5 2.7) (xy 7.5 2.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 2.7) (xy -2.7 3.3) (xy -2.1 3.3) (xy -2.1 2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 2.7) (xy -0.9 3.3) (xy -0.3 3.3) (xy -0.3 2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 2.7) (xy 0.9 3.3) (xy 1.5 3.3) (xy 1.5 2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 2.7) (xy 1.5 3.3) (xy 2.1 3.3) (xy 2.1 2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 2.7) (xy 2.1 3.3) (xy 2.7 3.3) (xy 2.7 2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 2.7) (xy 4.5 3.3) (xy 5.1 3.3) (xy 5.1 2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 2.7) (xy 5.1 3.3) (xy 5.7 3.3) (xy 5.7 2.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 3.3) (xy -7.5 3.9) (xy -6.9 3.9) (xy -6.9 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.9 3.3) (xy -6.9 3.9) (xy -6.3 3.9) (xy -6.3 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 3.3) (xy -6.3 3.9) (xy -5.7 3.9) (xy -5.7 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 3.3) (xy -5.7 3.9) (xy -5.1 3.9) (xy -5.1 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 3.3) (xy -5.1 3.9) (xy -4.5 3.9) (xy -4.5 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -4.5 3.3) (xy -4.5 3.9) (xy -3.9 3.9) (xy -3.9 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 3.3) (xy -3.9 3.9) (xy -3.3 3.9) (xy -3.3 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 3.3) (xy -1.5 3.9) (xy -0.9 3.9) (xy -0.9 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 3.3) (xy -0.9 3.9) (xy -0.3 3.9) (xy -0.3 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 3.3) (xy 0.3 3.9) (xy 0.9 3.9) (xy 0.9 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 3.3) (xy 1.5 3.9) (xy 2.1 3.9) (xy 2.1 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 3.3) (xy 2.1 3.9) (xy 2.7 3.9) (xy 2.7 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 3.3) (xy 3.3 3.9) (xy 3.9 3.9) (xy 3.9 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 3.3) (xy 4.5 3.9) (xy 5.1 3.9) (xy 5.1 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 3.3) (xy 5.7 3.9) (xy 6.3 3.9) (xy 6.3 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 3.3) (xy 6.3 3.9) (xy 6.9 3.9) (xy 6.9 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 3.3) (xy 6.9 3.9) (xy 7.5 3.9) (xy 7.5 3.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 3.9) (xy -7.5 4.5) (xy -6.9 4.5) (xy -6.9 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 3.9) (xy -3.9 4.5) (xy -3.3 4.5) (xy -3.3 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 3.9) (xy -1.5 4.5) (xy -0.9 4.5) (xy -0.9 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 3.9) (xy -0.9 4.5) (xy -0.3 4.5) (xy -0.3 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 3.9) (xy -0.3 4.5) (xy 0.3 4.5) (xy 0.3 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 3.9) (xy 1.5 4.5) (xy 2.1 4.5) (xy 2.1 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 3.9) (xy 2.1 4.5) (xy 2.7 4.5) (xy 2.7 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 3.9) (xy 4.5 4.5) (xy 5.1 4.5) (xy 5.1 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 3.9) (xy 5.1 4.5) (xy 5.7 4.5) (xy 5.7 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 3.9) (xy 6.3 4.5) (xy 6.9 4.5) (xy 6.9 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 3.9) (xy 6.9 4.5) (xy 7.5 4.5) (xy 7.5 3.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 4.5) (xy -7.5 5.1) (xy -6.9 5.1) (xy -6.9 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 4.5) (xy -6.3 5.1) (xy -5.7 5.1) (xy -5.7 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 4.5) (xy -5.7 5.1) (xy -5.1 5.1) (xy -5.1 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 4.5) (xy -5.1 5.1) (xy -4.5 5.1) (xy -4.5 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 4.5) (xy -3.9 5.1) (xy -3.3 5.1) (xy -3.3 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 4.5) (xy -2.7 5.1) (xy -2.1 5.1) (xy -2.1 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 4.5) (xy -1.5 5.1) (xy -0.9 5.1) (xy -0.9 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 4.5) (xy -0.9 5.1) (xy -0.3 5.1) (xy -0.3 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 4.5) (xy -0.3 5.1) (xy 0.3 5.1) (xy 0.3 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 4.5) (xy 1.5 5.1) (xy 2.1 5.1) (xy 2.1 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 4.5) (xy 2.1 5.1) (xy 2.7 5.1) (xy 2.7 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.7 4.5) (xy 2.7 5.1) (xy 3.3 5.1) (xy 3.3 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 4.5) (xy 3.3 5.1) (xy 3.9 5.1) (xy 3.9 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.9 4.5) (xy 3.9 5.1) (xy 4.5 5.1) (xy 4.5 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 4.5) (xy 4.5 5.1) (xy 5.1 5.1) (xy 5.1 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 4.5) (xy 5.1 5.1) (xy 5.7 5.1) (xy 5.7 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 4.5) (xy 5.7 5.1) (xy 6.3 5.1) (xy 6.3 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 4.5) (xy 6.3 5.1) (xy 6.9 5.1) (xy 6.9 4.5)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 5.1) (xy -7.5 5.7) (xy -6.9 5.7) (xy -6.9 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 5.1) (xy -6.3 5.7) (xy -5.7 5.7) (xy -5.7 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 5.1) (xy -5.7 5.7) (xy -5.1 5.7) (xy -5.1 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 5.1) (xy -5.1 5.7) (xy -4.5 5.7) (xy -4.5 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 5.1) (xy -3.9 5.7) (xy -3.3 5.7) (xy -3.3 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 5.1) (xy -2.7 5.7) (xy -2.1 5.7) (xy -2.1 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 5.1) (xy -2.1 5.7) (xy -1.5 5.7) (xy -1.5 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 5.1) (xy -0.9 5.7) (xy -0.3 5.7) (xy -0.3 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 5.1) (xy -0.3 5.7) (xy 0.3 5.7) (xy 0.3 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 5.1) (xy 1.5 5.7) (xy 2.1 5.7) (xy 2.1 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 5.1) (xy 3.3 5.7) (xy 3.9 5.7) (xy 3.9 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 4.5 5.1) (xy 4.5 5.7) (xy 5.1 5.7) (xy 5.1 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 5.1) (xy 5.1 5.7) (xy 5.7 5.7) (xy 5.7 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 5.1) (xy 6.9 5.7) (xy 7.5 5.7) (xy 7.5 5.1)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 5.7) (xy -7.5 6.3) (xy -6.9 6.3) (xy -6.9 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 5.7) (xy -6.3 6.3) (xy -5.7 6.3) (xy -5.7 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 5.7) (xy -5.7 6.3) (xy -5.1 6.3) (xy -5.1 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 5.7) (xy -5.1 6.3) (xy -4.5 6.3) (xy -4.5 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 5.7) (xy -3.9 6.3) (xy -3.3 6.3) (xy -3.3 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.7 5.7) (xy -2.7 6.3) (xy -2.1 6.3) (xy -2.1 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 5.7) (xy -2.1 6.3) (xy -1.5 6.3) (xy -1.5 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 5.7) (xy -1.5 6.3) (xy -0.9 6.3) (xy -0.9 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 5.7) (xy 0.3 6.3) (xy 0.9 6.3) (xy 0.9 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 5.7) (xy 0.9 6.3) (xy 1.5 6.3) (xy 1.5 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 5.7) (xy 5.1 6.3) (xy 5.7 6.3) (xy 5.7 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 5.7) (xy 6.9 6.3) (xy 7.5 6.3) (xy 7.5 5.7)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 6.3) (xy -7.5 6.9) (xy -6.9 6.9) (xy -6.9 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 6.3) (xy -3.9 6.9) (xy -3.3 6.9) (xy -3.3 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 6.3) (xy -2.1 6.9) (xy -1.5 6.9) (xy -1.5 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.9 6.3) (xy -0.9 6.9) (xy -0.3 6.9) (xy -0.3 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 6.3) (xy 0.3 6.9) (xy 0.9 6.9) (xy 0.9 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 6.3) (xy 0.9 6.9) (xy 1.5 6.9) (xy 1.5 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 2.1 6.3) (xy 2.1 6.9) (xy 2.7 6.9) (xy 2.7 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 6.3) (xy 3.3 6.9) (xy 3.9 6.9) (xy 3.9 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.9 6.3) (xy 3.9 6.9) (xy 4.5 6.9) (xy 4.5 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.1 6.3) (xy 5.1 6.9) (xy 5.7 6.9) (xy 5.7 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 6.3) (xy 6.9 6.9) (xy 7.5 6.9) (xy 7.5 6.3)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -7.5 6.9) (xy -7.5 7.5) (xy -6.9 7.5) (xy -6.9 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.9 6.9) (xy -6.9 7.5) (xy -6.3 7.5) (xy -6.3 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -6.3 6.9) (xy -6.3 7.5) (xy -5.7 7.5) (xy -5.7 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.7 6.9) (xy -5.7 7.5) (xy -5.1 7.5) (xy -5.1 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -5.1 6.9) (xy -5.1 7.5) (xy -4.5 7.5) (xy -4.5 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -4.5 6.9) (xy -4.5 7.5) (xy -3.9 7.5) (xy -3.9 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -3.9 6.9) (xy -3.9 7.5) (xy -3.3 7.5) (xy -3.3 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -2.1 6.9) (xy -2.1 7.5) (xy -1.5 7.5) (xy -1.5 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -1.5 6.9) (xy -1.5 7.5) (xy -0.9 7.5) (xy -0.9 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy -0.3 6.9) (xy -0.3 7.5) (xy 0.3 7.5) (xy 0.3 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.3 6.9) (xy 0.3 7.5) (xy 0.9 7.5) (xy 0.9 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 0.9 6.9) (xy 0.9 7.5) (xy 1.5 7.5) (xy 1.5 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 1.5 6.9) (xy 1.5 7.5) (xy 2.1 7.5) (xy 2.1 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 3.3 6.9) (xy 3.3 7.5) (xy 3.9 7.5) (xy 3.9 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 5.7 6.9) (xy 5.7 7.5) (xy 6.3 7.5) (xy 6.3 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.3 6.9) (xy 6.3 7.5) (xy 6.9 7.5) (xy 6.9 6.9)) (layer F.SilkS) (width 0))
(fp_poly (pts (xy 6.9 6.9) (xy 6.9 7.5) (xy 7.5 7.5) (xy 7.5 6.9)) (layer F.SilkS) (width 0))
(fp_text user "bogus 1 2 3 4" (at 0 -17.25) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_mask: 2" (at 0 -15.55) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_ecc: 3,2" (at 0 -13.85) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_size: 25" (at 0 -12.15) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user "qr_version: 2" (at 0 -10.45) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
)
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -947,6 +947,7 @@ def test_qr_lib_1(test_dir):
prj = 'qr_test/qr_test' prj = 'qr_test/qr_test'
ctx = context.TestContext(test_dir, 'test_qr_lib_1', prj, 'qr_lib_1', POS_DIR) ctx = context.TestContext(test_dir, 'test_qr_lib_1', prj, 'qr_lib_1', POS_DIR)
ctx.run() # extra_debug=True ctx.run() # extra_debug=True
# Check the schematic
fname = 'Schematic.pdf' fname = 'Schematic.pdf'
ctx.expect_out_file(fname) ctx.expect_out_file(fname)
cmd = ['convert', '-density', '300', ctx.get_out_path(fname), ctx.get_out_path('%d.png')] cmd = ['convert', '-density', '300', ctx.get_out_path(fname), ctx.get_out_path('%d.png')]
@ -959,9 +960,25 @@ def test_qr_lib_1(test_dir):
res = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode() res = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode()
logging.debug(res.split('\n')[0]) logging.debug(res.split('\n')[0])
assert 'QR-Code:https://github.com/INTI-CMNB/KiBot/' in res assert 'QR-Code:https://github.com/INTI-CMNB/KiBot/' in res
# Check the PCB
fname = 'PCB.pdf'
ctx.expect_out_file(fname)
cmd = ['convert', '-density', '300', ctx.get_out_path(fname), ctx.get_out_path('p%d.png')]
subprocess.check_call(cmd)
cmd = ['zbarimg', ctx.get_out_path('p0.png')]
res = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode()
logging.debug(res.split('\n')[0])
assert 'QR-Code:QR PCB B' in res
cmd = ['zbarimg', ctx.get_out_path('p1.png')]
res = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode()
logging.debug(res.split('\n')[0])
assert 'QR-Code:https://github.com/INTI-CMNB/KiBot/' in res
# Restore the original files
bd = ctx.get_board_dir() bd = ctx.get_board_dir()
files = ['qr.lib', 'qr.kicad_sym', 'qr.pretty/QR.kicad_mod', 'qr.pretty/QR2.kicad_mod'] files = ['qr.lib', 'qr.kicad_sym', 'qr.pretty/QR.kicad_mod', 'qr.pretty/QR2.kicad_mod', 'qr_test.kicad_pcb']
for f in files: for f in files:
bogus = os.path.join(bd, 'qr_test/'+f+'.bogus') bogus = os.path.join(bd, 'qr_test/'+f+'.bogus')
if os.path.isfile(bogus): if os.path.isfile(bogus):
shutil.copy2(bogus, os.path.join(bd, 'qr_test/'+f)) shutil.copy2(bogus, os.path.join(bd, 'qr_test/'+f))
os.remove(os.path.join(bd, 'qr_test/qr_test.kicad_pcb-bak'))
os.remove(os.path.join(bd, 'qr_test/qr_test.pro-bak'))

View File

@ -2,6 +2,9 @@
kibot: kibot:
version: 1 version: 1
preflight:
update_qr: true
outputs: outputs:
- name: 'QRCodes' - name: 'QRCodes'
comment: "Example of QR codes" comment: "Example of QR codes"
@ -20,9 +23,19 @@ outputs:
- name: 'print_sch' - name: 'print_sch'
comment: "Print schematic (PDF)" comment: "Print schematic (PDF)"
type: pdf_sch_print type: pdf_sch_print
dir: .
options: options:
output: Schematic.pdf output: Schematic.pdf
monochrome: true monochrome: true
frame: false frame: false
- name: 'print_front'
comment: "Print F.SilkS and F.Cu"
type: pdf_pcb_print
options:
output: PCB.pdf
plot_sheet_reference: false
monochrome: true
separated: true
layers:
- layer: F.SilkS
- layer: F.Cu