(export (version D)
  (design
    (source /Users/konkers/work/zedmon/pcb/zedmon.sch)
    (date "Monday, January 08, 2018 'PMt' 02:14:04 PM")
    (tool "Eeschema 4.0.7")
    (sheet (number 1) (name /) (tstamps /)
      (title_block
        (title)
        (company)
        (rev)
        (date)
        (source zedmon.sch)
        (comment (number 1) (value ""))
        (comment (number 2) (value ""))
        (comment (number 3) (value ""))
        (comment (number 4) (value ""))))
    (sheet (number 2) (name "/Current Sense and Control/") (tstamps /5A0E8542/)
      (title_block
        (title)
        (company)
        (rev)
        (date)
        (source sense.sch)
        (comment (number 1) (value ""))
        (comment (number 2) (value ""))
        (comment (number 3) (value ""))
        (comment (number 4) (value "")))))
  (components
    (comp (ref U1)
      (value STM32F072)
      (footprint Housings_DFN_QFN:QFN-48-1EP_7x7mm_Pitch0.5mm)
      (fields
        (field (name MPN) STM32F072CBU6)
        (field (name Mfgr) "St Micro"))
      (libsource (lib 00_microcontrollers) (part STM32F072))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFC6F5))
    (comp (ref Y1)
      (value "8MHz(16pF)")
      (footprint Crystals:Crystal_SMD_5032-2pin_5.0x3.2mm)
      (fields
        (field (name MPN) ABM3-8.000MHZ-D2Y-T))
      (libsource (lib device) (part Crystal_Small))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFCA02))
    (comp (ref C2)
      (value 20pF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) CC0402JRNPO9BN200))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFCBD1))
    (comp (ref C4)
      (value 20pF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) CC0402JRNPO9BN200))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFCC4E))
    (comp (ref C5)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFD0B3))
    (comp (ref C8)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFD110))
    (comp (ref C10)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFD173))
    (comp (ref C6)
      (value 4.7uF)
      (footprint Capacitors_SMD:C_0603)
      (fields
        (field (name MPN) GRM155R60G475ME47D))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFD1A3))
    (comp (ref C11)
      (value 4.7uF)
      (footprint Capacitors_SMD:C_0603)
      (fields
        (field (name MPN) GRM155R60G475ME47D))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFD1F3))
    (comp (ref SW2)
      (value TACT_4.2MM)
      (footprint MF_Switches:MF_Switches-TACT4.2MM)
      (fields
        (field (name MPN) MF-SW-TACT-4.2MM))
      (libsource (lib MF_Switches) (part TACT_4.2MM))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFE0E0))
    (comp (ref R5)
      (value 10K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-10K))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFE2FD))
    (comp (ref C12)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFE6C1))
    (comp (ref J1)
      (value Conn_02x05_Odd_Even)
      (footprint 00_connectors:ftsh_105)
      (fields
        (field (name MPN) FTSH-105-01-F-DV-K-P))
      (libsource (lib conn) (part Conn_02x05_Odd_Even))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFEC0D))
    (comp (ref SW1)
      (value TACT_4.2MM)
      (footprint MF_Switches:MF_Switches-TACT4.2MM)
      (fields
        (field (name MPN) MF-SW-TACT-4.2MM))
      (libsource (lib MF_Switches) (part TACT_4.2MM))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFECE6))
    (comp (ref C7)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFEFE1))
    (comp (ref R3)
      (value 330)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-330))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFFC0F))
    (comp (ref R4)
      (value 330)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-330))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFFD5E))
    (comp (ref R6)
      (value 220)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-220))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFFDB1))
    (comp (ref U2)
      (value TLV70233PDBVR)
      (footprint MF_IC_Power:MF_IC_Power-SOT-23-5)
      (fields
        (field (name MPN) MF-REG-SOT235-3.3V-300mA))
      (libsource (lib MF_IC_Power) (part TLV70233PDBVR))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E024C6))
    (comp (ref C14)
      (value "1uF X5R")
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E02964))
    (comp (ref C13)
      (value "1uF X5R")
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E02A44))
    (comp (ref R1)
      (value 1K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-1K))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E076EF))
    (comp (ref R2)
      (value 1K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-1K))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E07779))
    (comp (ref R13)
      (value DNI)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-10K))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E089B4))
    (comp (ref R11)
      (value DNI)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-10K))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E0AA40))
    (comp (ref R9)
      (value 10K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-10K))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E0AB8B))
    (comp (ref R7)
      (value DNI)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-10K))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E0ABAA))
    (comp (ref D2)
      (value 5.6V)
      (footprint Diodes_SMD:D_SOD-123)
      (fields
        (field (name MPN) BZT52C5V6-7-F))
      (libsource (lib device) (part D_Zener_Small_ALT))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E1296C))
    (comp (ref L1)
      (value 600@100MHz)
      (footprint Inductors_SMD:L_0402)
      (fields
        (field (name MPN) BLM15AX601SN1D))
      (libsource (lib device) (part Ferrite_Bead_Small))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E12ACD))
    (comp (ref R16)
      (value 0)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-0))
      (libsource (lib device) (part R))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E63A24))
    (comp (ref C9)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFD146))
    (comp (ref D1)
      (value LED_RGB_CA_PLCC4)
      (footprint MF_LEDs:MF_LEDs-PLCC4)
      (fields
        (field (name MPN) MF-LED-3228-RGB))
      (libsource (lib MF_LEDs) (part LED_RGB_CA_PLCC4))
      (sheetpath (names /) (tstamps /))
      (tstamp 59DFF50A))
    (comp (ref J2)
      (value USB_MICRO_RIGHT)
      (footprint MF_Connectors:MF_Connectors-MICROUSB-RIGHT)
      (fields
        (field (name MPN) MF-CON-MICROUSB-RIGHT))
      (libsource (lib MF_Connectors) (part USB_MICRO_RIGHT))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E010D8))
    (comp (ref J5)
      (value CON_01X06_PTH_2.54MM)
      (footprint MF_Connectors:MF_Connectors-PTH_2.54MM_01X06)
      (fields
        (field (name LABEL01) GND)
        (field (name LABEL02) CTS#)
        (field (name LABEL03) VCC)
        (field (name LABEL04) TXD)
        (field (name LABEL05) RXD)
        (field (name LABEL06) RTS#)
        (field (name MPN) MF-CON-2.54mm-01x06))
      (libsource (lib MF_Connectors) (part CON_01X06_PTH_2.54MM))
      (sheetpath (names /) (tstamps /))
      (tstamp 59E114FE))
    (comp (ref MK1)
      (value Mounting_Hole)
      (footprint MH:ZEDMON_MH)
      (libsource (lib mechanical) (part Mounting_Hole))
      (sheetpath (names /) (tstamps /))
      (tstamp 5A101FC8))
    (comp (ref MK2)
      (value Mounting_Hole)
      (footprint MH:ZEDMON_MH)
      (libsource (lib mechanical) (part Mounting_Hole))
      (sheetpath (names /) (tstamps /))
      (tstamp 5A1029CD))
    (comp (ref MK3)
      (value Mounting_Hole)
      (footprint MH:ZEDMON_MH)
      (libsource (lib mechanical) (part Mounting_Hole))
      (sheetpath (names /) (tstamps /))
      (tstamp 5A102A98))
    (comp (ref MK4)
      (value Mounting_Hole)
      (footprint MH:ZEDMON_MH)
      (libsource (lib mechanical) (part Mounting_Hole))
      (sheetpath (names /) (tstamps /))
      (tstamp 5A102B55))
    (comp (ref J4)
      (value Conn_01x02)
      (footprint Connectors_Phoenix:PhoenixContact_MC-G_02x3.50mm_Angled)
      (fields
        (field (name MPN) 1945096))
      (libsource (lib conn) (part Conn_01x02))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0E9DD4))
    (comp (ref J3)
      (value Conn_01x02)
      (footprint Connectors_Phoenix:PhoenixContact_MC-G_02x3.50mm_Angled)
      (fields
        (field (name MPN) 1945096))
      (libsource (lib conn) (part Conn_01x02))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0E9DDC))
    (comp (ref R15)
      (value "0.010 0.5%")
      (footprint shunt:LVK20R010DER)
      (fields
        (field (name MPN) LVK20R010DER)
        (field (name Mfg) Ohmite))
      (libsource (lib LVK20R010DER) (part RES2))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0E9DE5))
    (comp (ref R20)
      (value "0.010 0.5%")
      (footprint shunt:LVK20R010DER)
      (fields
        (field (name MPN) LVK20R010DER)
        (field (name Mfg) Ohmite))
      (libsource (lib LVK20R010DER) (part RES2))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0E9DFA))
    (comp (ref C15)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0E9E1C))
    (comp (ref C1)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0E9E59))
    (comp (ref K1)
      (value G6E)
      (footprint relay:RELAY_OMRON_G6RL)
      (libsource (lib relays) (part G6E))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0ED070))
    (comp (ref R17)
      (value 1K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-1K))
      (libsource (lib device) (part R))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0EDCF6))
    (comp (ref U7)
      (value iso1541)
      (footprint Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mm)
      (fields
        (field (name MPN) ISO1541D))
      (libsource (lib iso1541) (part iso1541))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0F42AF))
    (comp (ref U4)
      (value iso7720)
      (footprint Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mm)
      (fields
        (field (name MPN) ISO7720D))
      (libsource (lib iso7720) (part iso7720))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0F4947))
    (comp (ref R18)
      (value 1K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-1K))
      (libsource (lib device) (part R))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0F5402))
    (comp (ref R19)
      (value 1K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-1K))
      (libsource (lib device) (part R))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0F5451))
    (comp (ref U6)
      (value NXE1)
      (footprint Converters_DCDC_ACDC:DCDC-Conv_muRata_NXE2SxxxxMC)
      (fields
        (field (name MPN) NXE1S0303MC-R7))
      (libsource (lib nxe1) (part NXE1))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0FC8D3))
    (comp (ref D3)
      (value DIODES_SOD-123)
      (footprint MF_Discrete_Semiconductor:MF_Discrete_Semiconductor-SOD-123)
      (fields
        (field (name MPN) MF-DIO-SOD123-1N4148))
      (libsource (lib MF_Discrete_Semiconductor) (part DIODES_SOD-123))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0FEBA0))
    (comp (ref C16)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0FF10F))
    (comp (ref C3)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0FF1E5))
    (comp (ref C18)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0FF250))
    (comp (ref C19)
      (value 100nF)
      (footprint Capacitors_SMD:C_0402)
      (fields
        (field (name MPN) MF-CAP-0402-0.1uF))
      (libsource (lib device) (part C))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A0FF2A7))
    (comp (ref C17)
      (value 4.7uF)
      (footprint Capacitors_SMD:C_0603)
      (fields
        (field (name MPN) GRM155R60G475ME47D))
      (libsource (lib device) (part C))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A1000DE))
    (comp (ref U3)
      (value INA233)
      (footprint ina231:VSSOP-10)
      (libsource (lib ina231) (part INA233))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A53CDFD))
    (comp (ref U5)
      (value INA233)
      (footprint ina231:VSSOP-10)
      (libsource (lib ina231) (part INA233))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A53CEB8))
    (comp (ref R21)
      (value 1K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-1K))
      (libsource (lib device) (part R))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A53D098))
    (comp (ref R22)
      (value 1K)
      (footprint Resistors_SMD:R_0402)
      (fields
        (field (name MPN) MF-RES-0402-1K))
      (libsource (lib device) (part R))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A53D117))
    (comp (ref Q1)
      (value Q_NMOS_GSD)
      (footprint MF_Discrete_Semiconductor:MF_Discrete_Semiconductor-SOT-23-3)
      (libsource (lib device) (part Q_NMOS_GSD))
      (sheetpath (names "/Current Sense and Control/") (tstamps /5A0E8542/))
      (tstamp 5A53EF22)))
  (libparts
    (libpart (lib device) (part C)
      (description "Unpolarized capacitor")
      (footprints
        (fp C_*))
      (fields
        (field (name Reference) C)
        (field (name Value) C))
      (pins
        (pin (num 1) (name ~) (type passive))
        (pin (num 2) (name ~) (type passive))))
    (libpart (lib MF_Connectors) (part CON_01X06_PTH_2.54MM)
      (footprints
        (fp *PTH_2.54MM_01X06*))
      (fields
        (field (name Reference) J)
        (field (name Value) CON_01X06_PTH_2.54MM)
        (field (name Footprint) MF_Connectors_PTH_2.54MM_01X06)
        (field (name LABEL01) >LABEL01)
        (field (name LABEL02) >LABEL02)
        (field (name LABEL03) >LABEL03)
        (field (name LABEL04) >LABEL04)
        (field (name LABEL05) >LABEL05)
        (field (name LABEL06) >LABEL06))
      (pins
        (pin (num 1) (name PIN1) (type BiDi))
        (pin (num 2) (name PIN2) (type BiDi))
        (pin (num 3) (name PIN3) (type BiDi))
        (pin (num 4) (name PIN4) (type BiDi))
        (pin (num 5) (name PIN5) (type BiDi))
        (pin (num 6) (name PIN6) (type BiDi))))
    (libpart (lib conn) (part Conn_01x02)
      (description "Generic connector, single row, 01x02")
      (docs ~)
      (footprints
        (fp Connector*:*_??x*mm*)
        (fp Connector*:*1x??x*mm*)
        (fp Pin?Header?Straight?1X*)
        (fp Pin?Header?Angled?1X*)
        (fp Socket?Strip?Straight?1X*)
        (fp Socket?Strip?Angled?1X*))
      (fields
        (field (name Reference) J)
        (field (name Value) Conn_01x02))
      (pins
        (pin (num 1) (name Pin_1) (type passive))
        (pin (num 2) (name Pin_2) (type passive))))
    (libpart (lib conn) (part Conn_02x05_Odd_Even)
      (description "Generic connector, double row, 02x05, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers)")
      (docs ~)
      (footprints
        (fp Connector*:*2x??x*mm*)
        (fp Connector*:*2x???Pitch*)
        (fp Pin_Header_Straight_2X*)
        (fp Pin_Header_Angled_2X*)
        (fp Socket_Strip_Straight_2X*)
        (fp Socket_Strip_Angled_2X*))
      (fields
        (field (name Reference) J)
        (field (name Value) Conn_02x05_Odd_Even))
      (pins
        (pin (num 1) (name Pin_1) (type passive))
        (pin (num 2) (name Pin_2) (type passive))
        (pin (num 3) (name Pin_3) (type passive))
        (pin (num 4) (name Pin_4) (type passive))
        (pin (num 5) (name Pin_5) (type passive))
        (pin (num 6) (name Pin_6) (type passive))
        (pin (num 7) (name Pin_7) (type passive))
        (pin (num 8) (name Pin_8) (type passive))
        (pin (num 9) (name Pin_9) (type passive))
        (pin (num 10) (name Pin_10) (type passive))))
    (libpart (lib device) (part Crystal_Small)
      (description "Two pin crystal, small symbol")
      (footprints
        (fp Crystal*))
      (fields
        (field (name Reference) Y)
        (field (name Value) Crystal_Small))
      (pins
        (pin (num 1) (name 1) (type passive))
        (pin (num 2) (name 2) (type passive))))
    (libpart (lib MF_Discrete_Semiconductor) (part DIODES_SOD-123)
      (aliases
        (alias DIODES_1N4148_SOD-123)
        (alias DIODES_BAT42_SOD-123))
      (footprints
        (fp *SOD-123*))
      (fields
        (field (name Reference) D)
        (field (name Value) DIODES_SOD-123)
        (field (name Footprint) MF_Discrete_Semiconductor_SOD-123))
      (pins
        (pin (num ANOD) (name ANODE) (type BiDi))
        (pin (num CATH) (name CATHODE) (type BiDi))))
    (libpart (lib device) (part D_Zener_Small_ALT)
      (description "Zener Diode, small symbol, alternativ symbol")
      (docs https://en.wikipedia.org/wiki/Zener_diode)
      (footprints
        (fp TO-???*)
        (fp *SingleDiode)
        (fp *_Diode_*)
        (fp *SingleDiode*)
        (fp D_*))
      (fields
        (field (name Reference) D)
        (field (name Value) D_Zener_Small_ALT))
      (pins
        (pin (num 1) (name K) (type passive))
        (pin (num 2) (name A) (type passive))))
    (libpart (lib device) (part Ferrite_Bead_Small)
      (description "Ferrite bead, small symbol")
      (footprints
        (fp Inductor_*)
        (fp L_*)
        (fp *Ferrite*))
      (fields
        (field (name Reference) L)
        (field (name Value) Ferrite_Bead_Small))
      (pins
        (pin (num 1) (name ~) (type passive))
        (pin (num 2) (name ~) (type passive))))
    (libpart (lib relays) (part G6E)
      (description "Omron G6E relay, Subminiature, Sensitive SPDT Signal Switching Relay, Single-Side Stable")
      (docs https://www.omron.com/ecb/products/pdf/en-g6e.pdf)
      (footprints
        (fp Relay*SPDT*OMRON*G6E*))
      (fields
        (field (name Reference) K)
        (field (name Value) G6E)
        (field (name Footprint) Relays_THT:Relay_SPDT_OMRON-G6E))
      (pins
        (pin (num 1) (name ~) (type passive))
        (pin (num 6) (name ~) (type passive))
        (pin (num 7) (name ~) (type passive))
        (pin (num 10) (name ~) (type passive))
        (pin (num 12) (name ~) (type passive))))
    (libpart (lib ina231) (part INA233)
      (footprints
        (fp vssop-10))
      (fields
        (field (name Reference) U)
        (field (name Value) INA233))
      (pins
        (pin (num 1) (name A1) (type input))
        (pin (num 2) (name A0) (type input))
        (pin (num 3) (name ALERT) (type input))
        (pin (num 4) (name SDA) (type input))
        (pin (num 5) (name SCL) (type input))
        (pin (num 6) (name VS) (type input))
        (pin (num 7) (name GND) (type input))
        (pin (num 8) (name BUS) (type input))
        (pin (num 9) (name IN-) (type input))
        (pin (num 10) (name IN+) (type input))))
    (libpart (lib MF_LEDs) (part LED_RGB_CA_PLCC4)
      (footprints
        (fp *PLCC4*))
      (fields
        (field (name Reference) D)
        (field (name Value) LED_RGB_CA_PLCC4)
        (field (name Footprint) MF_LEDs_PLCC4))
      (pins
        (pin (num 1) (name ANODE) (type power_in))
        (pin (num 2) (name CATHODE_RED) (type power_in))
        (pin (num 3) (name CATHODE_GREEN) (type power_in))
        (pin (num 4) (name CATHODE_BLUE) (type power_in))))
    (libpart (lib mechanical) (part Mounting_Hole)
      (description "Mounting Hole without connection")
      (footprints
        (fp Mounting?Hole*)
        (fp Hole*))
      (fields
        (field (name Reference) MK)
        (field (name Value) Mounting_Hole)))
    (libpart (lib nxe1) (part NXE1)
      (description "3.3V to 3.3V 300mA DC-DC Converter with 3kV isolation")
      (docs https://power.murata.com/data/power/ncl/kdc_nxe1.pdf)
      (footprints
        (fp DCDC*Conv*muRata*MC*))
      (fields
        (field (name Reference) U)
        (field (name Value) NXE1)
        (field (name Footprint) Converters_DCDC_ACDC:DCDC-Conv_muRata_NXE2SxxxxMC))
      (pins
        (pin (num 1) (name -VIN) (type power_in))
        (pin (num 3) (name +VIN) (type power_in))
        (pin (num 7) (name -VOUT) (type power_out))
        (pin (num 8) (name +VOUT) (type power_out))
        (pin (num 14) (name NC) (type NotConnected))))
    (libpart (lib device) (part Q_NMOS_GSD)
      (description "Transistor N-MOSFETwith substrate diode (general)")
      (fields
        (field (name Reference) Q)
        (field (name Value) Q_NMOS_GSD))
      (pins
        (pin (num 1) (name G) (type input))
        (pin (num 2) (name S) (type passive))
        (pin (num 3) (name D) (type passive))))
    (libpart (lib device) (part R)
      (description Resistor)
      (footprints
        (fp R_*)
        (fp R_*))
      (fields
        (field (name Reference) R)
        (field (name Value) R))
      (pins
        (pin (num 1) (name ~) (type passive))
        (pin (num 2) (name ~) (type passive))))
    (libpart (lib LVK20R010DER) (part RES2)
      (footprints
        (fp OH_LVK20))
      (fields
        (field (name Reference) R)
        (field (name Value) RES2)
        (field (name Footprint) OH_LVK20))
      (pins
        (pin (num 1) (name ~) (type unspc))
        (pin (num 2) (name ~) (type unspc))
        (pin (num 3) (name ~) (type unspc))
        (pin (num 4) (name ~) (type unspc))))
    (libpart (lib 00_microcontrollers) (part STM32F072)
      (fields
        (field (name Reference) U)
        (field (name Value) STM32F072))
      (pins
        (pin (num 1) (name VBAT) (type input))
        (pin (num 2) (name PC13) (type input))
        (pin (num 3) (name PC14_OSC32_IN) (type input))
        (pin (num 4) (name PC15_OSC32_OUT) (type input))
        (pin (num 5) (name PF0_OSC_IN) (type input))
        (pin (num 6) (name PF1_OSC_OUT) (type input))
        (pin (num 7) (name NRST) (type input))
        (pin (num 8) (name VSSA) (type input))
        (pin (num 9) (name VDDA) (type input))
        (pin (num 10) (name PA0) (type input))
        (pin (num 11) (name PA1) (type input))
        (pin (num 12) (name PA2) (type input))
        (pin (num 13) (name PA3) (type input))
        (pin (num 14) (name PA4) (type input))
        (pin (num 15) (name PA5) (type input))
        (pin (num 16) (name PA6) (type input))
        (pin (num 17) (name PA7) (type input))
        (pin (num 18) (name PB0) (type input))
        (pin (num 19) (name PB1) (type input))
        (pin (num 20) (name PB2) (type input))
        (pin (num 21) (name PB10) (type input))
        (pin (num 22) (name PB11) (type input))
        (pin (num 23) (name VSS) (type input))
        (pin (num 24) (name VDD) (type input))
        (pin (num 25) (name PB12) (type input))
        (pin (num 26) (name PB13) (type input))
        (pin (num 27) (name PB14) (type input))
        (pin (num 28) (name PB15) (type input))
        (pin (num 29) (name PA8) (type input))
        (pin (num 30) (name PA9) (type input))
        (pin (num 31) (name PA10) (type input))
        (pin (num 32) (name PA11) (type input))
        (pin (num 33) (name PA12) (type input))
        (pin (num 34) (name PA13) (type input))
        (pin (num 35) (name VSS) (type input))
        (pin (num 36) (name VDDIO2) (type input))
        (pin (num 37) (name PA14) (type input))
        (pin (num 38) (name PA15) (type input))
        (pin (num 39) (name PB3) (type input))
        (pin (num 40) (name PB4) (type input))
        (pin (num 41) (name PB5) (type input))
        (pin (num 42) (name PB6) (type input))
        (pin (num 43) (name PB7) (type input))
        (pin (num 44) (name BOOT0) (type input))
        (pin (num 45) (name PB8) (type input))
        (pin (num 46) (name PB9) (type input))
        (pin (num 47) (name VSS) (type input))
        (pin (num 48) (name VDD) (type input))))
    (libpart (lib MF_Switches) (part TACT_4.2MM)
      (footprints
        (fp *TACT4.2MM*)
        (fp *TACT6MM*))
      (fields
        (field (name Reference) SW)
        (field (name Value) TACT_4.2MM)
        (field (name Footprint) MF_Switches_TACT4.2MM))
      (pins
        (pin (num 1) (name 1) (type BiDi))
        (pin (num 2) (name 2) (type BiDi))
        (pin (num 3) (name 3) (type BiDi))
        (pin (num 4) (name 4) (type BiDi))))
    (libpart (lib MF_IC_Power) (part TLV70233PDBVR)
      (footprints
        (fp *SOT-23-5*))
      (fields
        (field (name Reference) U)
        (field (name Value) TLV70233PDBVR)
        (field (name Footprint) MF_IC_Power_SOT-23-5))
      (pins
        (pin (num 1) (name VIN) (type BiDi))
        (pin (num 2) (name GND/ADJ) (type BiDi))
        (pin (num 3) (name EN) (type BiDi))
        (pin (num 5) (name VOUT) (type BiDi))))
    (libpart (lib MF_Connectors) (part USB_MICRO_RIGHT)
      (footprints
        (fp *MICROUSB-RIGHT*)
        (fp *MINIUSB-RIGHT*))
      (fields
        (field (name Reference) J)
        (field (name Value) USB_MICRO_RIGHT)
        (field (name Footprint) MF_Connectors_MICROUSB-RIGHT))
      (pins
        (pin (num 1) (name 5V) (type power_in))
        (pin (num 2) (name D-) (type BiDi))
        (pin (num 3) (name D+) (type BiDi))
        (pin (num 4) (name ID) (type BiDi))
        (pin (num 5) (name GND) (type power_in))
        (pin (num S1) (name SLD) (type power_in))
        (pin (num S2) (name SLD) (type power_in))
        (pin (num S3) (name SLD) (type power_in))
        (pin (num S4) (name SLD) (type power_in))
        (pin (num S5) (name SLD) (type power_in))
        (pin (num S6) (name SLD) (type power_in))))
    (libpart (lib iso1541) (part iso1541)
      (fields
        (field (name Reference) U)
        (field (name Value) iso1541))
      (pins
        (pin (num 1) (name VCC1) (type input))
        (pin (num 2) (name SDA1) (type input))
        (pin (num 3) (name SCL1) (type input))
        (pin (num 4) (name GND1) (type input))
        (pin (num 5) (name GND2) (type input))
        (pin (num 6) (name SCL2) (type input))
        (pin (num 7) (name SDA2) (type input))
        (pin (num 8) (name VCC2) (type input))))
    (libpart (lib iso7720) (part iso7720)
      (fields
        (field (name Reference) U)
        (field (name Value) iso7720))
      (pins
        (pin (num 1) (name VCC1) (type input))
        (pin (num 2) (name INA) (type input))
        (pin (num 3) (name INB) (type input))
        (pin (num 4) (name GND1) (type input))
        (pin (num 5) (name GND2) (type input))
        (pin (num 6) (name OUTB) (type input))
        (pin (num 7) (name OUTA) (type input))
        (pin (num 8) (name VCC2) (type input)))))
  (libraries
    (library (logical device)
      (uri "/Library/Application Support/kicad/library/device.lib"))
    (library (logical conn)
      (uri "/Library/Application Support/kicad/library/conn.lib"))
    (library (logical iso1541)
      (uri /Users/konkers/work/zedmon/pcb/libs/iso1541/iso1541.lib))
    (library (logical MF_Discrete_Semiconductor)
      (uri /Users/konkers/work/zedmon/pcb/libs/github.com/MacroFab/EDALibraries/KiCad/Schematics/MF_Discrete_Semiconductor.lib))
    (library (logical ina231)
      (uri /Users/konkers/work/zedmon/pcb/libs/ina231/ina231.lib))
    (library (logical MF_IC_Power)
      (uri /Users/konkers/work/zedmon/pcb/libs/github.com/MacroFab/EDALibraries/KiCad/Schematics/MF_IC_Power.lib))
    (library (logical iso7720)
      (uri /Users/konkers/work/zedmon/pcb/libs/iso7720/iso7720.lib))
    (library (logical MF_LEDs)
      (uri /Users/konkers/work/zedmon/pcb/libs/github.com/MacroFab/EDALibraries/KiCad/Schematics/MF_LEDs.lib))
    (library (logical MF_Connectors)
      (uri /Users/konkers/work/zedmon/pcb/libs/github.com/MacroFab/EDALibraries/KiCad/Schematics/MF_Connectors.lib))
    (library (logical LVK20R010DER)
      (uri /Users/konkers/work/zedmon/pcb/libs/shunt/LVK20R010DER.lib))
    (library (logical 00_microcontrollers)
      (uri /Users/konkers/work/zedmon/pcb/libs/github.com/konkers/kicad_lib/00_microcontrollers.lib))
    (library (logical MF_Switches)
      (uri /Users/konkers/work/zedmon/pcb/libs/github.com/MacroFab/EDALibraries/KiCad/Schematics/MF_Switches.lib))
    (library (logical relays)
      (uri "/Library/Application Support/kicad/library/relays.lib"))
    (library (logical nxe1)
      (uri /Users/konkers/work/zedmon/pcb/libs/nxe1/nxe1.lib))
    (library (logical mechanical)
      (uri "/Library/Application Support/kicad/library/mechanical.lib")))
  (nets
    (net (code 1) (name /NRST)
      (node (ref C7) (pin 2))
      (node (ref SW1) (pin 4))
      (node (ref SW1) (pin 3))
      (node (ref J1) (pin 10))
      (node (ref U1) (pin 7)))
    (net (code 2) (name "Net-(J1-Pad1)")
      (node (ref R16) (pin 1))
      (node (ref J1) (pin 1)))
    (net (code 3) (name /LED_RED)
      (node (ref R6) (pin 2))
      (node (ref U1) (pin 26)))
    (net (code 4) (name /LED_GREEN)
      (node (ref R4) (pin 2))
      (node (ref U1) (pin 27)))
    (net (code 5) (name /LED_BLUE)
      (node (ref R3) (pin 2))
      (node (ref U1) (pin 28)))
    (net (code 6) (name "Net-(D1-Pad2)")
      (node (ref D1) (pin 2))
      (node (ref R6) (pin 1)))
    (net (code 7) (name "Net-(D1-Pad3)")
      (node (ref D1) (pin 3))
      (node (ref R4) (pin 1)))
    (net (code 8) (name "Net-(D1-Pad4)")
      (node (ref D1) (pin 4))
      (node (ref R3) (pin 1)))
    (net (code 9) (name "Net-(J2-Pad4)")
      (node (ref J2) (pin 4)))
    (net (code 10) (name "Net-(J5-Pad6)")
      (node (ref J5) (pin 6)))
    (net (code 11) (name "Net-(J5-Pad3)")
      (node (ref J5) (pin 3)))
    (net (code 12) (name "Net-(J5-Pad2)")
      (node (ref J5) (pin 2)))
    (net (code 13) (name "Net-(U1-Pad1)")
      (node (ref U1) (pin 1)))
    (net (code 14) (name "Net-(U1-Pad19)")
      (node (ref U1) (pin 19)))
    (net (code 15) (name "Net-(U1-Pad20)")
      (node (ref U1) (pin 20)))
    (net (code 16) (name "Net-(U1-Pad39)")
      (node (ref U1) (pin 39)))
    (net (code 17) (name "Net-(U1-Pad40)")
      (node (ref U1) (pin 40)))
    (net (code 18) (name "Net-(U1-Pad41)")
      (node (ref U1) (pin 41)))
    (net (code 19) (name "Net-(U1-Pad42)")
      (node (ref U1) (pin 42)))
    (net (code 20) (name "Net-(C2-Pad1)")
      (node (ref U1) (pin 5))
      (node (ref C2) (pin 1))
      (node (ref Y1) (pin 2)))
    (net (code 21) (name "Net-(C4-Pad1)")
      (node (ref C4) (pin 1))
      (node (ref Y1) (pin 1))
      (node (ref U1) (pin 6)))
    (net (code 22) (name /UART_TX)
      (node (ref U1) (pin 30))
      (node (ref J5) (pin 5)))
    (net (code 23) (name /UART_RX)
      (node (ref U1) (pin 31))
      (node (ref J5) (pin 4)))
    (net (code 24) (name /USB_DM)
      (node (ref J2) (pin 2))
      (node (ref U1) (pin 32)))
    (net (code 25) (name /USB_DP)
      (node (ref U1) (pin 33))
      (node (ref J2) (pin 3)))
    (net (code 26) (name /SWDIO)
      (node (ref U1) (pin 34))
      (node (ref J1) (pin 2)))
    (net (code 27) (name /SWCLK)
      (node (ref U1) (pin 37))
      (node (ref J1) (pin 4)))
    (net (code 28) (name GND)
      (node (ref U2) (pin 2))
      (node (ref C11) (pin 2))
      (node (ref C6) (pin 2))
      (node (ref C10) (pin 2))
      (node (ref D2) (pin 2))
      (node (ref C8) (pin 2))
      (node (ref C13) (pin 2))
      (node (ref C14) (pin 2))
      (node (ref J1) (pin 3))
      (node (ref U1) (pin 35))
      (node (ref R5) (pin 2))
      (node (ref U1) (pin 23))
      (node (ref U1) (pin 47))
      (node (ref U1) (pin 8))
      (node (ref C5) (pin 2))
      (node (ref C4) (pin 2))
      (node (ref C2) (pin 2))
      (node (ref C7) (pin 1))
      (node (ref C9) (pin 2))
      (node (ref SW1) (pin 2))
      (node (ref SW1) (pin 1))
      (node (ref J1) (pin 9))
      (node (ref J1) (pin 5))
      (node (ref U6) (pin 1))
      (node (ref J5) (pin 1))
      (node (ref J2) (pin S5))
      (node (ref C16) (pin 1))
      (node (ref C3) (pin 1))
      (node (ref R17) (pin 2))
      (node (ref U4) (pin 5))
      (node (ref J2) (pin S6))
      (node (ref U7) (pin 4))
      (node (ref J2) (pin 5))
      (node (ref J2) (pin S1))
      (node (ref J2) (pin S2))
      (node (ref J2) (pin S3))
      (node (ref J2) (pin S4))
      (node (ref Q1) (pin 2)))
    (net (code 29) (name +3V3)
      (node (ref R7) (pin 1))
      (node (ref U1) (pin 48))
      (node (ref U2) (pin 5))
      (node (ref U1) (pin 36))
      (node (ref U7) (pin 1))
      (node (ref C14) (pin 1))
      (node (ref R16) (pin 2))
      (node (ref C9) (pin 1))
      (node (ref SW2) (pin 1))
      (node (ref C11) (pin 1))
      (node (ref C6) (pin 1))
      (node (ref C10) (pin 1))
      (node (ref C8) (pin 1))
      (node (ref SW2) (pin 2))
      (node (ref U1) (pin 24))
      (node (ref R2) (pin 1))
      (node (ref R1) (pin 1))
      (node (ref C3) (pin 2))
      (node (ref U4) (pin 8))
      (node (ref R11) (pin 1))
      (node (ref U1) (pin 9))
      (node (ref R9) (pin 1))
      (node (ref C5) (pin 1))
      (node (ref C16) (pin 2))
      (node (ref U6) (pin 3))
      (node (ref R13) (pin 1))
      (node (ref C12) (pin 1)))
    (net (code 30) (name /USB_VBUS)
      (node (ref D2) (pin 1))
      (node (ref J2) (pin 1))
      (node (ref L1) (pin 2)))
    (net (code 31) (name /ALERT_LOW)
      (node (ref U4) (pin 6))
      (node (ref U1) (pin 17)))
    (net (code 32) (name /ALERT_HIGH)
      (node (ref U1) (pin 16))
      (node (ref U4) (pin 7)))
    (net (code 33) (name "Net-(U1-Pad18)")
      (node (ref U1) (pin 18)))
    (net (code 34) (name /POWER_ENABLE_J)
      (node (ref Q1) (pin 1))
      (node (ref U1) (pin 25))
      (node (ref R17) (pin 1)))
    (net (code 35) (name +5V)
      (node (ref D3) (pin CATH))
      (node (ref K1) (pin 1))
      (node (ref U2) (pin 1))
      (node (ref L1) (pin 1))
      (node (ref C13) (pin 1))
      (node (ref U2) (pin 3))
      (node (ref D1) (pin 1)))
    (net (code 36) (name /SDA)
      (node (ref U7) (pin 2))
      (node (ref U1) (pin 22))
      (node (ref R2) (pin 2)))
    (net (code 37) (name /SCL)
      (node (ref U7) (pin 3))
      (node (ref U1) (pin 21))
      (node (ref R1) (pin 2)))
    (net (code 38) (name "Net-(J1-Pad8)")
      (node (ref J1) (pin 8)))
    (net (code 39) (name "Net-(J1-Pad7)")
      (node (ref J1) (pin 7)))
    (net (code 40) (name "Net-(J1-Pad6)")
      (node (ref J1) (pin 6)))
    (net (code 41) (name "Net-(U1-Pad14)")
      (node (ref U1) (pin 14)))
    (net (code 42) (name "Net-(U1-Pad43)")
      (node (ref U1) (pin 43)))
    (net (code 43) (name "Net-(U1-Pad4)")
      (node (ref U1) (pin 4)))
    (net (code 44) (name "Net-(U1-Pad3)")
      (node (ref U1) (pin 3)))
    (net (code 45) (name "Net-(U1-Pad2)")
      (node (ref U1) (pin 2)))
    (net (code 46) (name "Net-(U1-Pad29)")
      (node (ref U1) (pin 29)))
    (net (code 47) (name "Net-(U1-Pad38)")
      (node (ref U1) (pin 38)))
    (net (code 48) (name "Net-(U1-Pad46)")
      (node (ref U1) (pin 46)))
    (net (code 49) (name "Net-(U1-Pad45)")
      (node (ref U1) (pin 45)))
    (net (code 50) (name "Net-(U1-Pad15)")
      (node (ref U1) (pin 15)))
    (net (code 51) (name /BOOT0)
      (node (ref U1) (pin 44))
      (node (ref SW2) (pin 3))
      (node (ref SW2) (pin 4))
      (node (ref R5) (pin 1))
      (node (ref C12) (pin 2)))
    (net (code 52) (name /BOARD_ID_0)
      (node (ref R7) (pin 2))
      (node (ref U1) (pin 10)))
    (net (code 53) (name /BOARD_ID_1)
      (node (ref U1) (pin 11))
      (node (ref R9) (pin 2)))
    (net (code 54) (name /BOARD_ID_2)
      (node (ref R11) (pin 2))
      (node (ref U1) (pin 12)))
    (net (code 55) (name /BOARD_ID_3)
      (node (ref R13) (pin 2))
      (node (ref U1) (pin 13)))
    (net (code 56) (name "Net-(J4-Pad2)")
      (node (ref J4) (pin 2))
      (node (ref K1) (pin 10)))
    (net (code 57) (name "Net-(K1-Pad7)")
      (node (ref R15) (pin 4))
      (node (ref K1) (pin 7)))
    (net (code 58) (name "/Current Sense and Control/VBUS")
      (node (ref U3) (pin 8))
      (node (ref R15) (pin 1))
      (node (ref J3) (pin 2))
      (node (ref U5) (pin 8)))
    (net (code 59) (name "/Current Sense and Control/ALERT_LOW_ISO")
      (node (ref U5) (pin 3))
      (node (ref R21) (pin 2))
      (node (ref U4) (pin 3)))
    (net (code 60) (name "/Current Sense and Control/SENSE_HIGH_P")
      (node (ref R15) (pin 3))
      (node (ref U3) (pin 10)))
    (net (code 61) (name "/Current Sense and Control/SENSE_HIGH_N")
      (node (ref R15) (pin 2))
      (node (ref U3) (pin 9)))
    (net (code 62) (name "/Current Sense and Control/SCL_ISO")
      (node (ref R18) (pin 2))
      (node (ref U7) (pin 6))
      (node (ref U5) (pin 5))
      (node (ref U3) (pin 5)))
    (net (code 63) (name "/Current Sense and Control/SDA_ISO")
      (node (ref U5) (pin 4))
      (node (ref R19) (pin 2))
      (node (ref U7) (pin 7))
      (node (ref U3) (pin 4)))
    (net (code 64) (name "/Current Sense and Control/SENSE_LOW_N")
      (node (ref R20) (pin 4))
      (node (ref U5) (pin 9)))
    (net (code 65) (name "/Current Sense and Control/SENSE_LOW_P")
      (node (ref R20) (pin 1))
      (node (ref U5) (pin 10)))
    (net (code 66) (name "/Current Sense and Control/ALERT_HIGH_ISO")
      (node (ref U3) (pin 3))
      (node (ref R22) (pin 2))
      (node (ref U4) (pin 2)))
    (net (code 67) (name "Net-(D3-PadANOD)")
      (node (ref Q1) (pin 3))
      (node (ref D3) (pin ANOD))
      (node (ref K1) (pin 6)))
    (net (code 68) (name "Net-(J4-Pad1)")
      (node (ref J4) (pin 1))
      (node (ref R20) (pin 3)))
    (net (code 69) (name +3.3VA)
      (node (ref U6) (pin 8))
      (node (ref R18) (pin 1))
      (node (ref R19) (pin 1))
      (node (ref U7) (pin 8))
      (node (ref U4) (pin 1))
      (node (ref C18) (pin 1))
      (node (ref C19) (pin 1))
      (node (ref C17) (pin 1))
      (node (ref C15) (pin 1))
      (node (ref U5) (pin 6))
      (node (ref R21) (pin 1))
      (node (ref R22) (pin 1))
      (node (ref C1) (pin 1))
      (node (ref U3) (pin 6))
      (node (ref U5) (pin 2)))
    (net (code 70) (name GNDA)
      (node (ref U7) (pin 5))
      (node (ref U3) (pin 7))
      (node (ref U5) (pin 1))
      (node (ref U5) (pin 7))
      (node (ref C1) (pin 2))
      (node (ref R20) (pin 2))
      (node (ref U3) (pin 2))
      (node (ref U3) (pin 1))
      (node (ref J3) (pin 1))
      (node (ref U6) (pin 7))
      (node (ref C17) (pin 2))
      (node (ref C15) (pin 2))
      (node (ref U4) (pin 4))
      (node (ref C18) (pin 2))
      (node (ref C19) (pin 2)))
    (net (code 71) (name "Net-(K1-Pad12)")
      (node (ref K1) (pin 12)))
    (net (code 72) (name "Net-(U6-Pad14)")
      (node (ref U6) (pin 14)))))