text:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="8.1.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="12.5" unitdist="mil" unit="mil" style="dots" multiple="1" display="yes" altdistance="5" altunitdist="mil" altunit="mil"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="no" active="no"/>
<layer number="3" name="Route3" color="4" fill="3" visible="no" active="no"/>
<layer number="14" name="Route14" color="1" fill="6" visible="no" active="no"/>
<layer number="15" name="Route15" color="4" fill="6" visible="no" active="no"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="13" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="3" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="3" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="3" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="3" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="3" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="57" name="tCAD" color="7" fill="1" visible="no" active="no"/>
<layer number="58" name="b3D" color="7" fill="1" visible="no" active="no"/>
<layer number="59" name="tCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="60" name="bCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="90" name="Modules" color="5" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="no" active="no"/>
<layer number="92" name="Busses" color="1" fill="1" visible="no" active="no"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="no"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="no" active="no"/>
<layer number="95" name="Names" color="7" fill="1" visible="no" active="no"/>
<layer number="96" name="Values" color="7" fill="1" visible="no" active="no"/>
<layer number="97" name="Info" color="7" fill="1" visible="no" active="no"/>
<layer number="98" name="Guide" color="6" fill="1" visible="no" active="no"/>
<layer number="99" name="SpiceOrder" color="5" fill="1" visible="no" active="no"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="108" name="tplace-old" color="10" fill="1" visible="yes" active="yes"/>
<layer number="109" name="ref-old" color="11" fill="1" visible="yes" active="yes"/>
<layer number="110" name="fp0" color="7" fill="1" visible="yes" active="yes"/>
<layer number="111" name="LPC17xx" color="7" fill="1" visible="yes" active="yes"/>
<layer number="112" name="tSilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="113" name="IDFDebug" color="4" fill="1" visible="yes" active="yes"/>
<layer number="114" name="FRNTMAAT1" color="7" fill="1" visible="yes" active="yes"/>
<layer number="115" name="FRNTMAAT2" color="7" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="117" name="BACKMAAT1" color="7" fill="1" visible="yes" active="yes"/>
<layer number="118" name="Rect_Pads" color="7" fill="1" visible="no" active="no"/>
<layer number="119" name="KAP_TEKEN" color="7" fill="1" visible="yes" active="yes"/>
<layer number="120" name="KAP_MAAT1" color="7" fill="1" visible="yes" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="123" name="tTestmark" color="7" fill="1" visible="yes" active="yes"/>
<layer number="124" name="bTestmark" color="7" fill="1" visible="yes" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="126" name="_bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="127" name="_tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="128" name="_bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="129" name="Mask" color="7" fill="1" visible="yes" active="yes"/>
<layer number="130" name="SMDSTROOK" color="7" fill="1" visible="yes" active="yes"/>
<layer number="131" name="tAdjust" color="7" fill="1" visible="yes" active="yes"/>
<layer number="132" name="bAdjust" color="7" fill="1" visible="yes" active="yes"/>
<layer number="133" name="mtFinish" color="7" fill="1" visible="yes" active="yes"/>
<layer number="134" name="mbFinish" color="7" fill="1" visible="yes" active="yes"/>
<layer number="135" name="mtGlue" color="7" fill="1" visible="yes" active="yes"/>
<layer number="136" name="mbGlue" color="7" fill="1" visible="yes" active="yes"/>
<layer number="137" name="mtTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="138" name="mbTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="139" name="mtKeepout" color="7" fill="1" visible="yes" active="yes"/>
<layer number="140" name="mbKeepout" color="7" fill="1" visible="yes" active="yes"/>
<layer number="141" name="mtRestrict" color="7" fill="1" visible="yes" active="yes"/>
<layer number="142" name="mbRestrict" color="7" fill="1" visible="yes" active="yes"/>
<layer number="143" name="mvRestrict" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="145" name="mHoles" color="7" fill="1" visible="yes" active="yes"/>
<layer number="146" name="mMilling" color="7" fill="1" visible="yes" active="yes"/>
<layer number="147" name="mMeasures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="148" name="mDocument" color="7" fill="1" visible="yes" active="yes"/>
<layer number="149" name="mReference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="150" name="Notes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="152" name="_bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="153" name="FabDoc1" color="6" fill="1" visible="no" active="no"/>
<layer number="154" name="FabDoc2" color="2" fill="1" visible="no" active="no"/>
<layer number="155" name="FabDoc3" color="7" fill="15" visible="no" active="no"/>
<layer number="191" name="mNets" color="7" fill="1" visible="yes" active="yes"/>
<layer number="192" name="mBusses" color="7" fill="1" visible="yes" active="yes"/>
<layer number="193" name="mPins" color="7" fill="1" visible="yes" active="yes"/>
<layer number="194" name="mSymbols" color="7" fill="1" visible="yes" active="yes"/>
<layer number="195" name="mNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="196" name="mValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="199" name="Contour" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="no"/>
<layer number="201" name="201bmp" color="2" fill="1" visible="no" active="no"/>
<layer number="202" name="202bmp" color="3" fill="1" visible="no" active="no"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="225" name="225bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="226" name="226bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="227" name="227bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="228" name="228bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="229" name="229bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="230" name="230bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="231" name="Eagle3D_PG1" color="7" fill="1" visible="yes" active="yes"/>
<layer number="232" name="Eagle3D_PG2" color="7" fill="1" visible="yes" active="yes"/>
<layer number="233" name="Eagle3D_PG3" color="7" fill="1" visible="yes" active="yes"/>
<layer number="248" name="Housing" color="7" fill="1" visible="yes" active="yes"/>
<layer number="249" name="Edge" color="7" fill="1" visible="yes" active="yes"/>
<layer number="250" name="Descript" color="7" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="7" fill="1" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
<layer number="255" name="Accent" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<board>
<plain>
<text x="16.861" y="22.10325" size="0.889" layer="25" font="vector" ratio="15">2</text>
<text x="21.97275" y="22.10325" size="0.889" layer="25" font="vector" ratio="15">4</text>
<text x="24.481" y="22.10325" size="0.889" layer="25" font="vector" ratio="15">5</text>
<text x="26.54475" y="22.10325" size="0.889" layer="25" font="vector" ratio="15">RX</text>
<text x="29.21175" y="22.10325" size="0.889" layer="25" font="vector" ratio="15">TX</text>
<text x="19.43275" y="22.008" size="0.889" layer="25" font="vector" ratio="15">0</text>
<text x="13.59075" y="22.10325" size="0.8128" layer="25" font="vector" ratio="15">GND</text>
<text x="28.83075" y="2.41825" size="0.8128" layer="25" font="vector" ratio="15">RST</text>
<text x="11.43175" y="22.10325" size="0.8128" layer="25" font="vector" ratio="15">5V</text>
<text x="21.433" y="2.41825" size="0.889" layer="25" font="vector" ratio="15">14</text>
<text x="18.893" y="2.41825" size="0.889" layer="25" font="vector" ratio="15">12</text>
<wire x1="30.7975" y1="25.4" x2="4.445" y2="25.4" width="0.254" layer="21"/>
<wire x1="3.175" y1="24.13" x2="3.175" y2="3.175" width="0.254" layer="21"/>
<wire x1="11.43" y1="0" x2="13.335" y2="0" width="0.254" layer="21"/>
<wire x1="13.335" y1="0" x2="30.1625" y2="0" width="0.254" layer="21"/>
<wire x1="30.1625" y1="0" x2="31.4325" y2="0.9525" width="0.254" layer="21" curve="90"/>
<wire x1="31.4325" y1="0.9525" x2="31.4325" y2="24.4475" width="0.254" layer="21"/>
<wire x1="31.4325" y1="24.4475" x2="30.7975" y2="25.4" width="0.254" layer="21" curve="90"/>
<text x="26.64" y="2.41825" size="0.889" layer="25" font="vector" ratio="15">A0</text>
<wire x1="4.445" y1="25.4" x2="3.175" y2="24.13" width="0.254" layer="21" curve="90"/>
<wire x1="5.588" y1="0.889" x2="8.255" y2="0.889" width="0.1524" layer="21"/>
<wire x1="11.43" y1="0" x2="10.795" y2="0.635" width="0.254" layer="21"/>
<wire x1="10.795" y1="0.635" x2="9.525" y2="1.905" width="0.254" layer="21"/>
<wire x1="9.525" y1="1.905" x2="4.445" y2="1.905" width="0.254" layer="21"/>
<wire x1="4.445" y1="1.905" x2="3.175" y2="3.175" width="0.254" layer="21" curve="-90"/>
<wire x1="8.255" y1="0.889" x2="8.255" y2="1.905" width="0.1524" layer="21"/>
<wire x1="5.588" y1="0.889" x2="5.588" y2="1.905" width="0.1524" layer="21"/>
<text x="11.019" y="2.41825" size="0.8128" layer="25" font="vector" ratio="15">3V3</text>
<text x="13.843" y="2.413" size="0.889" layer="25" font="vector" ratio="15">15</text>
<text x="16.353" y="2.41825" size="0.889" layer="25" font="vector" ratio="15">13</text>
<text x="23.973" y="2.41825" size="0.889" layer="25" font="vector" ratio="15">16</text>
<wire x1="15.875" y1="25.4" x2="13.335" y2="25.4" width="0.2032" layer="21"/>
<wire x1="10.795" y1="25.4" x2="13.335" y2="25.4" width="0.2032" layer="21"/>
<wire x1="30.7975" y1="25.4" x2="28.575" y2="25.4" width="0.2032" layer="21"/>
<wire x1="15.875" y1="25.4" x2="28.575" y2="25.4" width="0.2032" layer="21"/>
<wire x1="13.335" y1="0" x2="15.875" y2="0" width="0.2032" layer="21"/>
<wire x1="15.875" y1="0" x2="18.415" y2="0" width="0.2032" layer="21"/>
<wire x1="18.415" y1="0" x2="20.955" y2="0" width="0.2032" layer="21"/>
<wire x1="20.955" y1="0" x2="23.495" y2="0" width="0.2032" layer="21"/>
<wire x1="23.495" y1="0" x2="26.035" y2="0" width="0.2032" layer="21"/>
<wire x1="26.035" y1="0" x2="28.575" y2="0" width="0.2032" layer="21"/>
<wire x1="28.575" y1="0" x2="30.1625" y2="0" width="0.2032" layer="21"/>
<wire x1="31.115" y1="0.635" x2="31.115" y2="3.175" width="0.2032" layer="22"/>
<wire x1="31.115" y1="3.175" x2="30.48" y2="3.81" width="0.2032" layer="22"/>
<wire x1="30.48" y1="3.81" x2="29.21" y2="3.81" width="0.2032" layer="22"/>
<wire x1="29.21" y1="3.81" x2="28.575" y2="3.175" width="0.2032" layer="22"/>
<wire x1="28.575" y1="3.175" x2="27.94" y2="3.81" width="0.2032" layer="22"/>
<wire x1="27.94" y1="3.81" x2="26.67" y2="3.81" width="0.2032" layer="22"/>
<wire x1="26.67" y1="3.81" x2="26.035" y2="3.175" width="0.2032" layer="22"/>
<wire x1="26.035" y1="3.175" x2="25.4" y2="3.81" width="0.2032" layer="22"/>
<wire x1="25.4" y1="3.81" x2="24.13" y2="3.81" width="0.2032" layer="22"/>
<wire x1="24.13" y1="3.81" x2="23.495" y2="3.175" width="0.2032" layer="22"/>
<wire x1="23.495" y1="3.175" x2="22.86" y2="3.81" width="0.2032" layer="22"/>
<wire x1="22.86" y1="3.81" x2="21.59" y2="3.81" width="0.2032" layer="22"/>
<wire x1="21.59" y1="3.81" x2="20.955" y2="3.175" width="0.2032" layer="22"/>
<wire x1="20.955" y1="3.175" x2="20.32" y2="3.81" width="0.2032" layer="22"/>
<wire x1="20.32" y1="3.81" x2="19.05" y2="3.81" width="0.2032" layer="22"/>
<wire x1="19.05" y1="3.81" x2="18.415" y2="3.175" width="0.2032" layer="22"/>
<wire x1="18.415" y1="3.175" x2="17.78" y2="3.81" width="0.2032" layer="22"/>
<wire x1="17.78" y1="3.81" x2="16.51" y2="3.81" width="0.2032" layer="22"/>
<wire x1="16.51" y1="3.81" x2="15.875" y2="3.175" width="0.2032" layer="22"/>
<wire x1="15.875" y1="3.175" x2="15.24" y2="3.81" width="0.2032" layer="22"/>
<wire x1="15.24" y1="3.81" x2="13.97" y2="3.81" width="0.2032" layer="22"/>
<wire x1="13.97" y1="3.81" x2="13.335" y2="3.175" width="0.2032" layer="22"/>
<wire x1="13.335" y1="3.175" x2="12.7" y2="3.81" width="0.2032" layer="22"/>
<wire x1="12.7" y1="3.81" x2="11.43" y2="3.81" width="0.2032" layer="22"/>
<wire x1="13.335" y1="0" x2="13.335" y2="3.175" width="0.2032" layer="22"/>
<wire x1="15.875" y1="3.175" x2="15.875" y2="0" width="0.2032" layer="22"/>
<wire x1="18.415" y1="3.175" x2="18.415" y2="0" width="0.2032" layer="22"/>
<wire x1="20.955" y1="3.175" x2="20.955" y2="0" width="0.2032" layer="22"/>
<wire x1="23.495" y1="3.175" x2="23.495" y2="0" width="0.2032" layer="22"/>
<wire x1="26.035" y1="3.175" x2="26.035" y2="0" width="0.2032" layer="22"/>
<wire x1="28.575" y1="3.175" x2="28.575" y2="0" width="0.2032" layer="22"/>
<wire x1="11.43" y1="3.81" x2="10.795" y2="3.175" width="0.2032" layer="22"/>
<wire x1="30.76575" y1="25.527" x2="4.445" y2="25.527" width="0.0254" layer="20"/>
<wire x1="4.445" y1="25.527" x2="4.41325" y2="25.527" width="0.0254" layer="20"/>
<wire x1="3.048" y1="24.13" x2="3.048" y2="3.1115" width="0.0254" layer="20"/>
<wire x1="3.048" y1="3.1115" x2="3.048" y2="3.048" width="0.0254" layer="20"/>
<wire x1="11.3665" y1="-0.127" x2="30.5435" y2="-0.127" width="0.0254" layer="20"/>
<wire x1="30.5435" y1="-0.127" x2="31.5595" y2="1.27" width="0.0254" layer="20" curve="90"/>
<wire x1="31.5595" y1="1.27" x2="31.5595" y2="24.13" width="0.0254" layer="20"/>
<wire x1="31.5595" y1="24.13" x2="30.76575" y2="25.527" width="0.0254" layer="20" curve="90"/>
<wire x1="10.795" y1="0.635" x2="10.795" y2="3.175" width="0.2032" layer="22"/>
<text x="17.45725" y="5.33575" size="1.016" layer="25" font="vector" ratio="15" rot="R90">RFM92/95
RFM96/98</text>
<wire x1="11.3665" y1="-0.127" x2="9.4615" y2="1.778" width="0.0254" layer="20"/>
<wire x1="9.4615" y1="1.778" x2="4.3815" y2="1.778" width="0.0254" layer="20"/>
<wire x1="4.3815" y1="1.778" x2="3.048" y2="3.1115" width="0.0254" layer="20" curve="-90"/>
<wire x1="4.445" y1="25.527" x2="3.048" y2="24.13" width="0.0254" layer="20" curve="90"/>
<text x="18.0975" y="14.605" size="1.4224" layer="25" font="vector" ratio="15">Lora
Node
Micro</text>
<text x="29.21" y="6.6675" size="1.4224" layer="26" font="vector" ratio="15" rot="MR0">Lora
Node
Micro</text>
<text x="29.21" y="6.0325" size="0.254" layer="26" font="vector" ratio="15" rot="MR0">CN V1</text>
<wire x1="13.335" y1="25.4" x2="13.335" y2="22.225" width="0.2032" layer="22"/>
<wire x1="13.335" y1="22.225" x2="13.97" y2="21.59" width="0.2032" layer="22"/>
<wire x1="13.97" y1="21.59" x2="15.24" y2="21.59" width="0.2032" layer="22"/>
<wire x1="15.24" y1="21.59" x2="15.875" y2="22.225" width="0.2032" layer="22"/>
<wire x1="15.875" y1="22.225" x2="15.875" y2="25.4" width="0.2032" layer="22"/>
<wire x1="13.335" y1="22.225" x2="12.7" y2="21.59" width="0.2032" layer="22"/>
<wire x1="12.7" y1="21.59" x2="11.43" y2="21.59" width="0.2032" layer="22"/>
<wire x1="11.43" y1="21.59" x2="10.795" y2="22.225" width="0.2032" layer="22"/>
<wire x1="10.795" y1="22.225" x2="10.795" y2="25.4" width="0.2032" layer="22"/>
<wire x1="15.875" y1="22.225" x2="16.51" y2="21.59" width="0.2032" layer="22"/>
<wire x1="16.51" y1="21.59" x2="17.78" y2="21.59" width="0.2032" layer="22"/>
<wire x1="17.78" y1="21.59" x2="18.415" y2="22.225" width="0.2032" layer="22"/>
<wire x1="18.415" y1="22.225" x2="19.05" y2="21.59" width="0.2032" layer="22"/>
<wire x1="19.05" y1="21.59" x2="20.32" y2="21.59" width="0.2032" layer="22"/>
<wire x1="20.32" y1="21.59" x2="20.955" y2="22.225" width="0.2032" layer="22"/>
<wire x1="20.955" y1="22.225" x2="21.59" y2="21.59" width="0.2032" layer="22"/>
<wire x1="21.59" y1="21.59" x2="22.86" y2="21.59" width="0.2032" layer="22"/>
<wire x1="22.86" y1="21.59" x2="23.495" y2="22.225" width="0.2032" layer="22"/>
<wire x1="23.495" y1="22.225" x2="24.13" y2="21.59" width="0.2032" layer="22"/>
<wire x1="24.13" y1="21.59" x2="25.4" y2="21.59" width="0.2032" layer="22"/>
<wire x1="25.4" y1="21.59" x2="26.035" y2="22.225" width="0.2032" layer="22"/>
<wire x1="26.035" y1="22.225" x2="26.67" y2="21.59" width="0.2032" layer="22"/>
<wire x1="26.67" y1="21.59" x2="27.94" y2="21.59" width="0.2032" layer="22"/>
<wire x1="27.94" y1="21.59" x2="28.575" y2="22.225" width="0.2032" layer="22"/>
<wire x1="28.575" y1="22.225" x2="29.21" y2="21.59" width="0.2032" layer="22"/>
<wire x1="29.21" y1="21.59" x2="30.48" y2="21.59" width="0.2032" layer="22"/>
<wire x1="30.48" y1="21.59" x2="31.115" y2="22.225" width="0.2032" layer="22"/>
<wire x1="31.115" y1="22.225" x2="31.115" y2="25.0825" width="0.2032" layer="22"/>
<wire x1="28.575" y1="25.4" x2="28.575" y2="22.225" width="0.2032" layer="22"/>
<wire x1="26.035" y1="25.4" x2="26.035" y2="22.225" width="0.2032" layer="22"/>
<wire x1="23.495" y1="25.4" x2="23.495" y2="22.225" width="0.2032" layer="22"/>
<wire x1="20.955" y1="25.4" x2="20.955" y2="22.225" width="0.2032" layer="22"/>
<wire x1="18.415" y1="25.4" x2="18.415" y2="22.225" width="0.2032" layer="22"/>
<text x="17.496" y="22.10325" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">2</text>
<text x="22.60775" y="22.10325" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">4</text>
<text x="25.116" y="22.10325" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">5</text>
<text x="28.067" y="22.10325" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">RX</text>
<text x="30.607" y="22.10325" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">TX</text>
<text x="20.06775" y="22.008" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">0</text>
<text x="15.621" y="22.10325" size="0.8128" layer="26" font="vector" ratio="15" rot="MR0">GND</text>
<text x="12.70175" y="22.10325" size="0.8128" layer="26" font="vector" ratio="15" rot="MR0">5V</text>
<text x="30.861" y="2.41825" size="0.8128" layer="26" font="vector" ratio="15" rot="MR0">RST</text>
<text x="23.0205" y="2.41825" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">14</text>
<text x="20.4805" y="2.41825" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">12</text>
<text x="28.067" y="2.41825" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">A0</text>
<text x="13.081" y="2.41825" size="0.8128" layer="26" font="vector" ratio="15" rot="MR0">3V3</text>
<text x="15.4305" y="2.413" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">15</text>
<text x="17.9405" y="2.41825" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">13</text>
<text x="25.5605" y="2.41825" size="0.889" layer="26" font="vector" ratio="15" rot="MR0">16</text>
<wire x1="13.335" y1="25.4" x2="13.335" y2="22.225" width="0.2032" layer="21"/>
<wire x1="13.335" y1="22.225" x2="13.97" y2="21.59" width="0.2032" layer="21"/>
<wire x1="13.97" y1="21.59" x2="15.24" y2="21.59" width="0.2032" layer="21"/>
<wire x1="15.24" y1="21.59" x2="15.875" y2="22.225" width="0.2032" layer="21"/>
<wire x1="15.875" y1="22.225" x2="15.875" y2="25.4" width="0.2032" layer="21"/>
<wire x1="13.335" y1="22.225" x2="12.7" y2="21.59" width="0.2032" layer="21"/>
<wire x1="12.7" y1="21.59" x2="11.43" y2="21.59" width="0.2032" layer="21"/>
<wire x1="11.43" y1="21.59" x2="10.795" y2="22.225" width="0.2032" layer="21"/>
<wire x1="10.795" y1="22.225" x2="10.795" y2="25.4" width="0.2032" layer="21"/>
<wire x1="15.875" y1="22.225" x2="16.51" y2="21.59" width="0.2032" layer="21"/>
<wire x1="16.51" y1="21.59" x2="17.78" y2="21.59" width="0.2032" layer="21"/>
<wire x1="17.78" y1="21.59" x2="18.415" y2="22.225" width="0.2032" layer="21"/>
<wire x1="18.415" y1="22.225" x2="19.05" y2="21.59" width="0.2032" layer="21"/>
<wire x1="19.05" y1="21.59" x2="20.32" y2="21.59" width="0.2032" layer="21"/>
<wire x1="20.32" y1="21.59" x2="20.955" y2="22.225" width="0.2032" layer="21"/>
<wire x1="20.955" y1="22.225" x2="21.59" y2="21.59" width="0.2032" layer="21"/>
<wire x1="21.59" y1="21.59" x2="22.86" y2="21.59" width="0.2032" layer="21"/>
<wire x1="22.86" y1="21.59" x2="23.495" y2="22.225" width="0.2032" layer="21"/>
<wire x1="23.495" y1="22.225" x2="24.13" y2="21.59" width="0.2032" layer="21"/>
<wire x1="24.13" y1="21.59" x2="25.4" y2="21.59" width="0.2032" layer="21"/>
<wire x1="25.4" y1="21.59" x2="26.035" y2="22.225" width="0.2032" layer="21"/>
<wire x1="26.035" y1="22.225" x2="26.67" y2="21.59" width="0.2032" layer="21"/>
<wire x1="26.67" y1="21.59" x2="27.94" y2="21.59" width="0.2032" layer="21"/>
<wire x1="27.94" y1="21.59" x2="28.575" y2="22.225" width="0.2032" layer="21"/>
<wire x1="28.575" y1="22.225" x2="29.21" y2="21.59" width="0.2032" layer="21"/>
<wire x1="29.21" y1="21.59" x2="30.48" y2="21.59" width="0.2032" layer="21"/>
<wire x1="30.48" y1="21.59" x2="31.115" y2="22.225" width="0.2032" layer="21"/>
<wire x1="31.115" y1="22.225" x2="31.115" y2="25.0825" width="0.2032" layer="21"/>
<wire x1="28.575" y1="25.4" x2="28.575" y2="22.225" width="0.2032" layer="21"/>
<wire x1="26.035" y1="25.4" x2="26.035" y2="22.225" width="0.2032" layer="21"/>
<wire x1="23.495" y1="25.4" x2="23.495" y2="22.225" width="0.2032" layer="21"/>
<wire x1="20.955" y1="25.4" x2="20.955" y2="22.225" width="0.2032" layer="21"/>
<wire x1="18.415" y1="25.4" x2="18.415" y2="22.225" width="0.2032" layer="21"/>
<wire x1="31.115" y1="0.635" x2="31.115" y2="3.175" width="0.2032" layer="21"/>
<wire x1="31.115" y1="3.175" x2="30.48" y2="3.81" width="0.2032" layer="21"/>
<wire x1="30.48" y1="3.81" x2="29.21" y2="3.81" width="0.2032" layer="21"/>
<wire x1="29.21" y1="3.81" x2="28.575" y2="3.175" width="0.2032" layer="21"/>
<wire x1="28.575" y1="3.175" x2="27.94" y2="3.81" width="0.2032" layer="21"/>
<wire x1="27.94" y1="3.81" x2="26.67" y2="3.81" width="0.2032" layer="21"/>
<wire x1="26.67" y1="3.81" x2="26.035" y2="3.175" width="0.2032" layer="21"/>
<wire x1="26.035" y1="3.175" x2="25.4" y2="3.81" width="0.2032" layer="21"/>
<wire x1="25.4" y1="3.81" x2="24.13" y2="3.81" width="0.2032" layer="21"/>
<wire x1="24.13" y1="3.81" x2="23.495" y2="3.175" width="0.2032" layer="21"/>
<wire x1="23.495" y1="3.175" x2="22.86" y2="3.81" width="0.2032" layer="21"/>
<wire x1="22.86" y1="3.81" x2="21.59" y2="3.81" width="0.2032" layer="21"/>
<wire x1="21.59" y1="3.81" x2="20.955" y2="3.175" width="0.2032" layer="21"/>
<wire x1="20.955" y1="3.175" x2="20.32" y2="3.81" width="0.2032" layer="21"/>
<wire x1="20.32" y1="3.81" x2="19.05" y2="3.81" width="0.2032" layer="21"/>
<wire x1="19.05" y1="3.81" x2="18.415" y2="3.175" width="0.2032" layer="21"/>
<wire x1="18.415" y1="3.175" x2="17.78" y2="3.81" width="0.2032" layer="21"/>
<wire x1="17.78" y1="3.81" x2="16.51" y2="3.81" width="0.2032" layer="21"/>
<wire x1="16.51" y1="3.81" x2="15.875" y2="3.175" width="0.2032" layer="21"/>
<wire x1="15.875" y1="3.175" x2="15.24" y2="3.81" width="0.2032" layer="21"/>
<wire x1="15.24" y1="3.81" x2="13.97" y2="3.81" width="0.2032" layer="21"/>
<wire x1="13.97" y1="3.81" x2="13.335" y2="3.175" width="0.2032" layer="21"/>
<wire x1="13.335" y1="3.175" x2="12.7" y2="3.81" width="0.2032" layer="21"/>
<wire x1="12.7" y1="3.81" x2="11.43" y2="3.81" width="0.2032" layer="21"/>
<wire x1="13.335" y1="0" x2="13.335" y2="3.175" width="0.2032" layer="21"/>
<wire x1="15.875" y1="3.175" x2="15.875" y2="0" width="0.2032" layer="21"/>
<wire x1="18.415" y1="3.175" x2="18.415" y2="0" width="0.2032" layer="21"/>
<wire x1="20.955" y1="3.175" x2="20.955" y2="0" width="0.2032" layer="21"/>
<wire x1="23.495" y1="3.175" x2="23.495" y2="0" width="0.2032" layer="21"/>
<wire x1="26.035" y1="3.175" x2="26.035" y2="0" width="0.2032" layer="21"/>
<wire x1="28.575" y1="3.175" x2="28.575" y2="0" width="0.2032" layer="21"/>
<wire x1="11.43" y1="3.81" x2="10.795" y2="3.175" width="0.2032" layer="21"/>
<wire x1="10.795" y1="0.635" x2="10.795" y2="3.175" width="0.2032" layer="21"/>
</plain>
<libraries>
<library name="_c2h">
<packages>
<package name="0805-CAP-LARGEPADS">
<wire x1="-0.2" y1="0.5" x2="-0.2" y2="-0.5" width="0.2" layer="21"/>
<wire x1="0.2" y1="0.5" x2="0.2" y2="-0.5" width="0.2" layer="21"/>
<wire x1="-0.3" y1="0" x2="-0.5" y2="0" width="0.2" layer="21"/>
<wire x1="0.3" y1="0" x2="0.5" y2="0" width="0.2" layer="21"/>
<rectangle x1="-1" y1="-0.625" x2="1" y2="0.625" layer="51"/>
<smd name="1" x="-1.127" y="0" dx="1.1556" dy="1.3" layer="1"/>
<smd name="2" x="1.127" y="0" dx="1.1556" dy="1.3" layer="1"/>
<text x="-0.762" y="0.8255" size="0.4064" layer="25">>NAME</text>
<text x="-1.016" y="-1.397" size="0.4064" layer="27">>VALUE</text>
</package>
<package name="RFM95">
<wire x1="-10.23" y1="-8" x2="5.7775" y2="-8" width="0.127" layer="21"/>
<wire x1="5.7775" y1="8" x2="-10.23" y2="8" width="0.127" layer="21"/>
<smd name="GND" x="5.7775" y="-5" dx="2" dy="1.27" layer="1"/>
<smd name="MISO" x="-10.23" y="5" dx="2" dy="1.27" layer="1"/>
<smd name="ANT" x="5.7775" y="-7" dx="2" dy="1.27" layer="1"/>
<smd name="VDD" x="5.7775" y="1" dx="2" dy="1.27" layer="1"/>
<smd name="DIO0" x="5.7775" y="3" dx="2" dy="1.27" layer="1"/>
<smd name="GND2" x="-10.23" y="-7" dx="2" dy="1.27" layer="1"/>
<text x="-3.23" y="10.08" size="1.27" layer="25" font="vector" ratio="16">>NAME</text>
<text x="-3.31" y="8.65" size="1.27" layer="27" font="vector" ratio="16">>VALUE</text>
<text x="3.4015" y="0.2665" size="1.397" layer="21" font="vector" ratio="20">+</text>
<text x="3.7315" y="-7.503" size="0.889" layer="21" font="vector" ratio="20">A</text>
<smd name="SCK" x="-10.23" y="1.0122" dx="2" dy="1.27" layer="1"/>
<wire x1="-7.3025" y1="0.9525" x2="-1.905" y2="0.9525" width="0.127" layer="21"/>
<wire x1="-1.905" y1="0.9525" x2="-1.905" y2="6.0325" width="0.127" layer="21"/>
<wire x1="-1.905" y1="6.0325" x2="-7.3025" y2="6.0325" width="0.127" layer="21"/>
<wire x1="-7.3025" y1="6.0325" x2="-7.3025" y2="0.9525" width="0.127" layer="21"/>
<wire x1="1.27" y1="5.3975" x2="1.27" y2="2.2225" width="0.127" layer="21"/>
<wire x1="1.27" y1="2.2225" x2="3.4925" y2="2.2225" width="0.127" layer="21"/>
<wire x1="3.4925" y1="2.2225" x2="3.4925" y2="5.3975" width="0.127" layer="21"/>
<wire x1="3.4925" y1="5.3975" x2="1.27" y2="5.3975" width="0.127" layer="21"/>
<text x="3.465" y="-5.639" size="1.27" layer="21" font="vector" ratio="25">-</text>
<smd name="GND1" x="-10.2225" y="7" dx="2" dy="1.27" layer="1" rot="R180"/>
<smd name="NSS" x="-10.2225" y="-1" dx="2" dy="1.27" layer="1" rot="R180"/>
<smd name="MOSI" x="-10.2245" y="3" dx="2" dy="1.27" layer="1"/>
<text x="-8.981" y="-7.671" size="1.397" layer="21" font="vector" ratio="25">-</text>
<text x="-8.981" y="6.299" size="1.27" layer="21" font="vector" ratio="25">-</text>
<smd name="DIO2" x="5.7795" y="7" dx="2" dy="1.27" layer="1" rot="R180"/>
<smd name="DIO5" x="-10.2245" y="-4.9365" dx="2" dy="1.27" layer="1"/>
<smd name="RST" x="-10.2225" y="-2.905" dx="2" dy="1.27" layer="1" rot="R180"/>
<smd name="DIO1" x="5.7795" y="5.095" dx="2" dy="1.27" layer="1" rot="R180"/>
</package>
<package name="SMA_UFL_PAD_TINY">
<wire x1="-3.205" y1="-0.7" x2="-3.205" y2="-2.1" width="0.2032" layer="21"/>
<wire x1="-3.205" y1="-2.1" x2="-0.605" y2="-2.1" width="0.2032" layer="21"/>
<wire x1="-0.605" y1="2.1" x2="-3.205" y2="2.1" width="0.2032" layer="21"/>
<wire x1="-3.205" y1="2.1" x2="-3.205" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-0.605" y1="-0.7" x2="-0.605" y2="-2.1" width="0.2032" layer="21"/>
<wire x1="-0.605" y1="2.1" x2="-0.605" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-3.305" y1="-0.7" x2="-3.305" y2="-2" width="0.2032" layer="21"/>
<wire x1="-3.305" y1="2" x2="-3.305" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-3.405" y1="-0.7" x2="-3.405" y2="-2.1" width="0.2032" layer="21"/>
<wire x1="-3.405" y1="2.1" x2="-3.405" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-3.405" y1="-2.1" x2="-3.205" y2="-2.1" width="0.2032" layer="21"/>
<wire x1="-3.405" y1="-0.7" x2="-3.205" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="-3.405" y1="0.7" x2="-3.205" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-3.405" y1="2.1" x2="-3.205" y2="2.1" width="0.2032" layer="21"/>
<smd name="GND2" x="-2.2225" y="-1.47025" dx="2.2" dy="1.016" layer="1" roundness="20" rot="R180"/>
<smd name="GND1" x="-2.2225" y="1.47025" dx="2.2" dy="1.016" layer="1" roundness="20" rot="R180"/>
<smd name="ANT1" x="-3.84275" y="0" dx="1.524" dy="1.016" layer="1" roundness="20" rot="R180"/>
<rectangle x1="-3.1115" y1="-0.8255" x2="-1.3335" y2="0.8255" layer="41" rot="R180"/>
<pad name="ANT2" x="-5.08" y="0" drill="0.5588" diameter="1.27" rot="R180"/>
<wire x1="-4.445" y1="1.9685" x2="-4.445" y2="0.8255" width="0.254" layer="21"/>
<wire x1="-4.445" y1="-0.8255" x2="-4.445" y2="-1.9685" width="0.254" layer="21"/>
<text x="-1.4732" y="-0.4953" size="0.889" layer="21" font="vector" ratio="15" rot="SR0" align="bottom-center">uFL</text>
<smd name="GND4" x="-2.3495" y="2.54" dx="4.318" dy="1.524" layer="1" cream="no"/>
<smd name="GND3" x="-2.3495" y="-2.54" dx="4.318" dy="1.524" layer="1" cream="no"/>
<smd name="ANT3" x="-3.58875" y="0" dx="2.032" dy="1.143" layer="16" roundness="10"/>
<wire x1="-1.8288" y1="0.3429" x2="-1.8288" y2="-0.4191" width="0.254" layer="22" curve="-69.354732"/>
<wire x1="-1.4605" y1="0.7493" x2="-1.4605" y2="-0.7747" width="0.254" layer="22" curve="-84.805571"/>
<wire x1="-1.0668" y1="1.1811" x2="-1.0668" y2="-1.1049" width="0.254" layer="22" curve="-90"/>
<smd name="GND5" x="-2.3495" y="2.54" dx="4.318" dy="1.524" layer="16" rot="R180" cream="no"/>
<smd name="GND6" x="-2.3495" y="-2.54" dx="4.318" dy="1.524" layer="16" rot="R180" cream="no"/>
</package>
</packages>
</library>
<library name="SparkFun-Connectors">
<description><h3>SparkFun Electronics' preferred foot prints</h3>
In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.<br><br>
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
<br><br>
<b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/
<br><br>
You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="1X08_NO_SILK">
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="4" x="7.62" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5" x="10.16" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="6" x="12.7" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="7" x="15.24" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="8" x="17.78" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">>NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">>VALUE</text>
<rectangle x1="14.986" y1="-0.254" x2="15.494" y2="0.254" layer="51"/>
<rectangle x1="12.446" y1="-0.254" x2="12.954" y2="0.254" layer="51"/>
<rectangle x1="9.906" y1="-0.254" x2="10.414" y2="0.254" layer="51"/>
<rectangle x1="7.366" y1="-0.254" x2="7.874" y2="0.254" layer="51"/>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
<rectangle x1="17.526" y1="-0.254" x2="18.034" y2="0.254" layer="51"/>
</package>
</packages>
</library>
<library name="Seeed-Discrete">
<packages>
<package name="SOD123-2.7X1.6">
<wire x1="1.325" y1="-0.8" x2="-1.325" y2="-0.8" width="0.127" layer="21"/>
<wire x1="-1.325" y1="-0.8" x2="-1.325" y2="0.8" width="0.127" layer="21"/>
<wire x1="-1.325" y1="0.8" x2="1.325" y2="0.8" width="0.127" layer="21"/>
<wire x1="1.325" y1="0.8" x2="1.325" y2="-0.8" width="0.127" layer="21"/>
<smd name="2" x="1.635" y="0" dx="1.02" dy="1.2" layer="1" rot="R270"/>
<smd name="1" x="-1.635" y="0" dx="1.02" dy="1.2" layer="1" rot="R270"/>
<text x="-1.905" y="1.016" size="0.889" layer="25" ratio="11">>NAME</text>
<text x="-1.27" y="-0.254" size="0.635" layer="27" ratio="10">>VALUE</text>
<rectangle x1="-1.397" y1="-0.762" x2="1.397" y2="0.762" layer="39" rot="R180"/>
<polygon width="0.127" layer="21">
<vertex x="-0.254" y="0.508"/>
<vertex x="-0.254" y="-0.508"/>
<vertex x="0.508" y="0"/>
</polygon>
</package>
</packages>
</library>
</libraries>
<attributes>
</attributes>
<variantdefs>
</variantdefs>
<classes>
<class number="0" name="default" width="0.2032" drill="0.3556">
<clearance class="0" value="0.1524"/>
</class>
<class number="1" name="power" width="0.2032" drill="0">
<clearance class="1" value="0.1524"/>
</class>
</classes>
<designrules name="PCBs_io *">
<description language="de"><b>MakerWorks Design Rules</b>
<p>
Die Standard-Design-Rules sind so gewählt, dass sie für
die meisten Anwendungen passen. Sollte ihre Platine
besondere Anforderungen haben, treffen Sie die erforderlichen
Einstellungen hier und speichern die Design Rules unter
einem neuen Namen ab.</description>
<description language="en"><b>MakerWorks Design Rules</b>
<p>
Please ensure your boards meet these minimum design rule requirements.</description>
<param name="layerSetup" value="(1*16)"/>
<param name="mtCopper" value="0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm 0.0356mm"/>
<param name="mtIsolate" value="1.5011mm 0.1499mm 0.2007mm 0.1499mm 0.2007mm 0.1499mm 0.2007mm 0.1499mm 0.2007mm 0.1499mm 0.2007mm 0.1499mm 0.2007mm 0.1499mm 0.2007mm"/>
<param name="mdWireWire" value="6mil"/>
<param name="mdWirePad" value="6mil"/>
<param name="mdWireVia" value="6mil"/>
<param name="mdPadPad" value="6mil"/>
<param name="mdPadVia" value="6mil"/>
<param name="mdViaVia" value="6mil"/>
<param name="mdSmdPad" value="6mil"/>
<param name="mdSmdVia" value="6mil"/>
<param name="mdSmdSmd" value="6mil"/>
<param name="mdViaViaSameLayer" value="8mil"/>
<param name="mnLayersViaInSmd" value="2"/>
<param name="mdCopperDimension" value="15mil"/>
<param name="mdDrill" value="6mil"/>
<param name="mdSmdStop" value="0mil"/>
<param name="msWidth" value="6mil"/>
<param name="msDrill" value="13mil"/>
<param name="msMicroVia" value="13mil"/>
<param name="msBlindViaRatio" value="0.5"/>
<param name="rvPadTop" value="0.25"/>
<param name="rvPadInner" value="0.25"/>
<param name="rvPadBottom" value="0.25"/>
<param name="rvViaOuter" value="0.25"/>
<param name="rvViaInner" value="0.25"/>
<param name="rvMicroViaOuter" value="0.25"/>
<param name="rvMicroViaInner" value="0.25"/>
<param name="rlMinPadTop" value="7mil"/>
<param name="rlMaxPadTop" value="20mil"/>
<param name="rlMinPadInner" value="7mil"/>
<param name="rlMaxPadInner" value="20mil"/>
<param name="rlMinPadBottom" value="7mil"/>
<param name="rlMaxPadBottom" value="20mil"/>
<param name="rlMinViaOuter" value="7mil"/>
<param name="rlMaxViaOuter" value="20mil"/>
<param name="rlMinViaInner" value="7mil"/>
<param name="rlMaxViaInner" value="20mil"/>
<param name="rlMinMicroViaOuter" value="4mil"/>
<param name="rlMaxMicroViaOuter" value="20mil"/>
<param name="rlMinMicroViaInner" value="4mil"/>
<param name="rlMaxMicroViaInner" value="20mil"/>
<param name="psTop" value="-1"/>
<param name="psBottom" value="-1"/>
<param name="psFirst" value="-1"/>
<param name="psElongationLong" value="100"/>
<param name="psElongationOffset" value="100"/>
<param name="mvStopFrame" value="1"/>
<param name="mvCreamFrame" value="0"/>
<param name="mlMinStopFrame" value="3mil"/>
<param name="mlMaxStopFrame" value="3mil"/>
<param name="mlMinCreamFrame" value="0mil"/>
<param name="mlMaxCreamFrame" value="0mil"/>
<param name="mlViaStopLimit" value="40mil"/>
<param name="srRoundness" value="0"/>
<param name="srMinRoundness" value="0mil"/>
<param name="srMaxRoundness" value="0mil"/>
<param name="slThermalIsolate" value="10mil"/>
<param name="slThermalsForVias" value="0"/>
<param name="dpMaxLengthDifference" value="10mm"/>
<param name="dpGapFactor" value="2.5"/>
<param name="checkGrid" value="0"/>
<param name="checkAngle" value="0"/>
<param name="checkFont" value="1"/>
<param name="checkRestrict" value="1"/>
<param name="useDiameter" value="13"/>
<param name="maxErrors" value="50"/>
</designrules>
<autorouter>
<pass name="Default">
<param name="RoutingGrid" value="50mil"/>
<param name="AutoGrid" value="1"/>
<param name="Efforts" value="0"/>
<param name="TopRouterVariant" value="1"/>
<param name="tpViaShape" value="round"/>
<param name="PrefDir.1" value="|"/>
<param name="PrefDir.2" value="0"/>
<param name="PrefDir.3" value="0"/>
<param name="PrefDir.4" value="0"/>
<param name="PrefDir.5" value="0"/>
<param name="PrefDir.6" value="0"/>
<param name="PrefDir.7" value="0"/>
<param name="PrefDir.8" value="0"/>
<param name="PrefDir.9" value="0"/>
<param name="PrefDir.10" value="0"/>
<param name="PrefDir.11" value="0"/>
<param name="PrefDir.12" value="0"/>
<param name="PrefDir.13" value="0"/>
<param name="PrefDir.14" value="0"/>
<param name="PrefDir.15" value="0"/>
<param name="PrefDir.16" value="-"/>
<param name="cfVia" value="8"/>
<param name="cfNonPref" value="5"/>
<param name="cfChangeDir" value="2"/>
<param name="cfOrthStep" value="2"/>
<param name="cfDiagStep" value="3"/>
<param name="cfExtdStep" value="0"/>
<param name="cfBonusStep" value="1"/>
<param name="cfMalusStep" value="1"/>
<param name="cfPadImpact" value="4"/>
<param name="cfSmdImpact" value="4"/>
<param name="cfBusImpact" value="0"/>
<param name="cfHugging" value="3"/>
<param name="cfAvoid" value="4"/>
<param name="cfPolygon" value="10"/>
<param name="cfBase.1" value="0"/>
<param name="cfBase.2" value="1"/>
<param name="cfBase.3" value="1"/>
<param name="cfBase.4" value="1"/>
<param name="cfBase.5" value="1"/>
<param name="cfBase.6" value="1"/>
<param name="cfBase.7" value="1"/>
<param name="cfBase.8" value="1"/>
<param name="cfBase.9" value="1"/>
<param name="cfBase.10" value="1"/>
<param name="cfBase.11" value="1"/>
<param name="cfBase.12" value="1"/>
<param name="cfBase.13" value="1"/>
<param name="cfBase.14" value="1"/>
<param name="cfBase.15" value="1"/>
<param name="cfBase.16" value="0"/>
<param name="mnVias" value="20"/>
<param name="mnSegments" value="9999"/>
<param name="mnExtdSteps" value="9999"/>
<param name="mnRipupLevel" value="10"/>
<param name="mnRipupSteps" value="100"/>
<param name="mnRipupTotal" value="100"/>
</pass>
<pass name="Follow-me" refer="Default" active="yes">
</pass>
<pass name="Busses" refer="Default" active="yes">
<param name="cfNonPref" value="4"/>
<param name="cfBusImpact" value="4"/>
<param name="cfHugging" value="0"/>
<param name="mnVias" value="0"/>
</pass>
<pass name="Route" refer="Default" active="yes">
</pass>
<pass name="Optimize1" refer="Default" active="yes">
<param name="cfVia" value="99"/>
<param name="cfExtdStep" value="10"/>
<param name="cfHugging" value="1"/>
<param name="mnExtdSteps" value="1"/>
<param name="mnRipupLevel" value="0"/>
</pass>
<pass name="Optimize2" refer="Optimize1" active="yes">
<param name="cfNonPref" value="0"/>
<param name="cfChangeDir" value="6"/>
<param name="cfExtdStep" value="0"/>
<param name="cfBonusStep" value="2"/>
<param name="cfMalusStep" value="2"/>
<param name="cfPadImpact" value="2"/>
<param name="cfSmdImpact" value="2"/>
<param name="cfHugging" value="0"/>
</pass>
<pass name="Optimize3" refer="Optimize2" active="yes">
<param name="cfChangeDir" value="8"/>
<param name="cfPadImpact" value="0"/>
<param name="cfSmdImpact" value="0"/>
</pass>
<pass name="Optimize4" refer="Optimize3" active="yes">
<param name="cfChangeDir" value="25"/>
</pass>
</autorouter>
<elements>
<element name="JP2" library="SparkFun-Connectors" package="1X08_NO_SILK" value="" x="29.845" y="1.27" smashed="yes" rot="R180">
<attribute name="PROD_ID" value="CONN-08438" x="29.845" y="1.27" size="1.778" layer="27" rot="R180" display="off"/>
<attribute name="VALUE" x="31.115" y="4.445" size="1.27" layer="27" rot="R180"/>
</element>
<element name="JP1" library="SparkFun-Connectors" package="1X08_NO_SILK" value="" x="29.845" y="24.13" smashed="yes" rot="R180">
<attribute name="PROD_ID" value="CONN-08438" x="29.845" y="24.13" size="1.778" layer="27" rot="R180" display="off"/>
<attribute name="VALUE" x="31.115" y="27.305" size="1.27" layer="27" rot="R180"/>
</element>
<element name="C2" library="_c2h" package="0805-CAP-LARGEPADS" value="10uF" x="6.35" y="14.2875" smashed="yes">
<attribute name="NAME" x="3.556" y="14.9225" size="0.8128" layer="25" font="vector" ratio="15" rot="R270"/>
<attribute name="VALUE" x="4.8895" y="12.6365" size="0.8128" layer="25" font="vector" ratio="15"/>
</element>
<element name="U$5" library="_c2h" package="RFM95" value="RFM95" x="15.875" y="12.7" smashed="yes" rot="R180"/>
<element name="C1" library="_c2h" package="0805-CAP-LARGEPADS" value="1uF" x="6.35" y="11.7475" smashed="yes">
<attribute name="NAME" x="4.3815" y="10.795" size="0.889" layer="25" font="vector" ratio="15" rot="R90"/>
<attribute name="VALUE" x="5.207" y="9.9695" size="0.889" layer="25" font="vector" ratio="15"/>
</element>
<element name="D2" library="Seeed-Discrete" package="SOD123-2.7X1.6" value="1N4148" x="14.605" y="9.652" smashed="yes" rot="MR180">
<attribute name="NAME" x="17.399" y="9.017" size="0.8128" layer="26" font="vector" ratio="15" rot="MR90"/>
</element>
<element name="D3" library="Seeed-Discrete" package="SOD123-2.7X1.6" value="1N4148" x="14.605" y="7.62" smashed="yes" rot="MR180">
<attribute name="NAME" x="17.399" y="6.858" size="0.8128" layer="26" font="vector" ratio="15" rot="MR90"/>
</element>
<element name="D4" library="Seeed-Discrete" package="SOD123-2.7X1.6" value="1N4148" x="14.605" y="5.715" smashed="yes" rot="MR180">
<attribute name="NAME" x="17.399" y="4.953" size="0.8128" layer="26" font="vector" ratio="15" rot="MR90"/>
<attribute name="VALUE" x="10.414" y="7.62" size="0.8128" layer="26" font="vector" ratio="15" rot="MR270" align="center"/>
</element>
<element name="J$2" library="_c2h" package="SMA_UFL_PAD_TINY" value="ANTENNATINY" x="3.175" y="21.59" rot="R180"/>
</elements>
<signals>
<signal name="S$2">
</signal>
<signal name="GND">
<polygon width="0.254" layer="16" isolate="0.3048">
<vertex x="32.7025" y="26.67"/>
<vertex x="32.7025" y="-1.27"/>
<vertex x="1.905" y="-1.27"/>
<vertex x="1.905" y="26.67"/>
</polygon>
<polygon width="0.254" layer="1" isolate="0.3048">
<vertex x="2.54" y="26.035"/>
<vertex x="32.0675" y="26.035"/>
<vertex x="32.0675" y="-0.635"/>
<vertex x="2.54" y="-0.635"/>
</polygon>
<via x="28.2575" y="10.414" extent="1-16" drill="0.3556" diameter="0.7112"/>
<contactref element="C2" pad="1"/>
<contactref element="U$5" pad="GND1"/>
<contactref element="U$5" pad="GND"/>
<contactref element="U$5" pad="GND2"/>
<contactref element="C1" pad="1"/>
<via x="9.4615" y="3.3655" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="9.779" y="24.003" extent="1-16" drill="0.3556" diameter="0.7112"/>
<contactref element="J$2" pad="GND1"/>
<contactref element="J$2" pad="GND2"/>
<contactref element="J$2" pad="GND3"/>
<contactref element="J$2" pad="GND4"/>
<via x="12.319" y="19.685" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="11.938" y="17.018" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="9.398" y="22.352" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="9.906" y="21.463" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="8.382" y="19.939" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="8.382" y="18.923" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="8.382" y="17.907" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="8.382" y="22.86" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="18.6055" y="4.064" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="24.0665" y="4.572" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="29.337" y="18.9865" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="10.795" y="20.955" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="11.811" y="20.828" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="12.065" y="18.542" extent="1-16" drill="0.3556" diameter="0.7112"/>
<via x="8.4455" y="17.0815" extent="1-16" drill="0.3556" diameter="0.7112"/>
<contactref element="JP1" pad="7"/>
<via x="23.749" y="17.3355" extent="1-16" drill="0.3556" diameter="0.7112"/>
</signal>
<signal name="SCL">
<contactref element="JP1" pad="3"/>
</signal>
<signal name="SDA">
<contactref element="JP1" pad="4"/>
</signal>
<signal name="GPIO14">
<contactref element="JP2" pad="4"/>
<contactref element="U$5" pad="SCK"/>
<wire x1="26.105" y1="11.6878" x2="23.1178" y2="11.6878" width="0.3048" layer="1"/>
<wire x1="23.1178" y1="11.6878" x2="22.225" y2="10.795" width="0.3048" layer="1"/>
<via x="22.225" y="10.795" extent="1-16" drill="0.3556" diameter="0.7112"/>
<wire x1="22.225" y1="10.795" x2="22.225" y2="1.27" width="0.3048" layer="16"/>
</signal>
<signal name="GPIO12">
<contactref element="JP2" pad="5"/>
<contactref element="U$5" pad="MISO"/>
<wire x1="19.685" y1="1.27" x2="19.685" y2="5.08" width="0.3048" layer="1"/>
<wire x1="19.685" y1="5.08" x2="22.305" y2="7.7" width="0.3048" layer="1"/>
<wire x1="26.105" y1="7.7" x2="22.305" y2="7.7" width="0.3048" layer="1"/>
</signal>
<signal name="GPIO13">
<contactref element="JP2" pad="6"/>
<contactref element="U$5" pad="MOSI"/>
<wire x1="17.145" y1="1.27" x2="17.145" y2="5.08" width="0.3048" layer="1"/>
<wire x1="17.145" y1="5.08" x2="21.765" y2="9.7" width="0.3048" layer="1"/>
<wire x1="26.0995" y1="9.7" x2="21.765" y2="9.7" width="0.3048" layer="1"/>
</signal>
<signal name="GPIO15">
<contactref element="JP2" pad="7"/>
<contactref element="D2" pad="2"/>
<contactref element="D3" pad="2"/>
<contactref element="D4" pad="2"/>
<wire x1="16.24" y1="9.652" x2="16.24" y2="7.62" width="0.3048" layer="16"/>
<wire x1="16.24" y1="7.62" x2="16.24" y2="5.715" width="0.3048" layer="16"/>
<wire x1="14.605" y1="1.27" x2="14.605" y2="4.08" width="0.3048" layer="16"/>
<wire x1="14.605" y1="4.08" x2="16.24" y2="5.715" width="0.3048" layer="16"/>
</signal>
<signal name="3V3">
<contactref element="C2" pad="2"/>
<contactref element="JP2" pad="8"/>
<contactref element="U$5" pad="VDD"/>
<contactref element="C1" pad="2"/>
<wire x1="11.1125" y1="11.7475" x2="9.16" y2="11.7" width="0.6096" layer="1"/>
<wire x1="9.16" y1="11.7" x2="10.0975" y2="11.7" width="0.6096" layer="1"/>
<wire x1="7.477" y1="11.7475" x2="7.477" y2="14.2875" width="0.6096" layer="1"/>
<wire x1="12.065" y1="1.27" x2="13.335" y2="2.54" width="0.4064" layer="1"/>
<wire x1="13.335" y1="2.54" x2="13.335" y2="11.7475" width="0.4064" layer="1"/>
<wire x1="13.335" y1="11.7475" x2="10.0975" y2="11.7475" width="0.4064" layer="1"/>
<wire x1="10.0975" y1="11.7475" x2="10.0975" y2="11.7" width="0.4064" layer="1"/>
<wire x1="10.0975" y1="11.7" x2="7.477" y2="11.7" width="0.4064" layer="1"/>
<wire x1="7.477" y1="11.7" x2="7.477" y2="11.7475" width="0.4064" layer="1"/>
</signal>
<signal name="A0">
<contactref element="JP2" pad="2"/>
</signal>
<signal name="GPIO16">
<contactref element="JP2" pad="3"/>
</signal>
<signal name="GPIO0">
<contactref element="JP1" pad="5"/>
</signal>
<signal name="GPIO2">
<contactref element="JP1" pad="6"/>
<contactref element="U$5" pad="NSS"/>
<wire x1="26.0975" y1="13.6525" x2="26.0975" y2="13.7" width="0.3048" layer="1"/>
<wire x1="26.0975" y1="13.7" x2="17.145" y2="13.7" width="0.3048" layer="1"/>
<wire x1="17.145" y1="13.7" x2="17.145" y2="24.13" width="0.3048" layer="1"/>
</signal>
<signal name="GPIO3">
<contactref element="JP1" pad="2"/>
</signal>
<signal name="RST">
<contactref element="JP2" pad="1"/>
<contactref element="U$5" pad="RST"/>
<wire x1="26.0975" y1="15.605" x2="29.845" y2="15.605" width="0.4064" layer="1"/>
<wire x1="29.845" y1="15.605" x2="29.845" y2="1.27" width="0.4064" layer="1"/>
</signal>
<signal name="GPIO1">
<contactref element="JP1" pad="1"/>
</signal>
<signal name="5V">
<contactref element="JP1" pad="8"/>
</signal>
<signal name="ANT">
<contactref element="U$5" pad="ANT"/>
<wire x1="10.0975" y1="19.7" x2="9.51" y2="19.7" width="0.6096" layer="1"/>
<contactref element="J$2" pad="ANT1"/>
<contactref element="J$2" pad="ANT2"/>
<contactref element="J$2" pad="ANT3"/>
<wire x1="9.51" y1="19.7" x2="9.51" y2="20.335" width="0.8128" layer="1"/>
<wire x1="9.51" y1="20.335" x2="8.255" y2="21.59" width="0.8128" layer="1"/>
<wire x1="6.76375" y1="21.59" x2="8.255" y2="21.59" width="0.6096" layer="16"/>
<wire x1="7.01775" y1="21.59" x2="8.255" y2="21.59" width="0.6096" layer="1"/>
</signal>
<signal name="DIO0">
<contactref element="D2" pad="1"/>
<contactref element="U$5" pad="DIO0"/>
<via x="11.811" y="9.652" extent="1-16" drill="0.3556" diameter="0.6096"/>
<wire x1="10.0975" y1="9.7" x2="11.763" y2="9.7" width="0.3048" layer="1"/>
<wire x1="11.763" y1="9.7" x2="11.811" y2="9.652" width="0.3048" layer="1"/>
<wire x1="12.97" y1="9.652" x2="11.811" y2="9.652" width="0.3048" layer="16"/>
</signal>
<signal name="DIO1">
<contactref element="D3" pad="1"/>
<contactref element="U$5" pad="DIO1"/>
<via x="11.811" y="7.62" extent="1-16" drill="0.3556" diameter="0.6096"/>
<wire x1="10.0805" y1="7.62" x2="10.0955" y2="7.605" width="0.3048" layer="1"/>
<wire x1="10.0955" y1="7.605" x2="11.796" y2="7.605" width="0.3048" layer="1"/>
<wire x1="11.796" y1="7.605" x2="11.811" y2="7.62" width="0.3048" layer="1"/>
<wire x1="12.97" y1="7.62" x2="11.811" y2="7.62" width="0.3048" layer="16"/>
</signal>
<signal name="DIO2">
<contactref element="D4" pad="1"/>
<contactref element="U$5" pad="DIO2"/>
<via x="11.811" y="5.715" extent="1-16" drill="0.3556" diameter="0.6096"/>
<wire x1="10.0955" y1="5.7" x2="11.796" y2="5.7" width="0.3048" layer="1"/>
<wire x1="11.796" y1="5.7" x2="11.811" y2="5.715" width="0.3048" layer="1"/>
<wire x1="12.97" y1="5.715" x2="11.811" y2="5.715" width="0.3048" layer="16"/>
</signal>
</signals>
<errors>
<approved hash="4,1,e8137ce914720166"/>
<approved hash="4,1,b388d1493d7b9b6e"/>
<approved hash="4,1,d0ce8b117da487f7"/>
<approved hash="4,16,d0ce8b117da487f7"/>
<approved hash="4,16,e8137ce914720166"/>
<approved hash="4,16,b388d1493d7b9b6e"/>
</errors>
</board>
</drawing>
<compatibility>
<note version="6.3" minversion="6.2.2" severity="warning">
Since Version 6.2.2 text objects can contain more than one line,
which will not be processed correctly with this version.
</note>
</compatibility>
</eagle>

license: Unlicense

repository: TheNitek/WeMos-Lora

repo_name: TheNitek/WeMos-Lora

extension: brd


text:
// *** WARNING: this file was generated by pulumigen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;

namespace Pulumi.Kubernetes.Types.Outputs.Core.V1
{

    /// <summary>
    /// ConfigMap holds configuration data for pods to consume.
    /// </summary>
    [OutputType]
    public sealed class ConfigMapPatch
    {
        /// <summary>
        /// APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
        /// </summary>
        public readonly string ApiVersion;
        /// <summary>
        /// BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.
        /// </summary>
        public readonly ImmutableDictionary<string, string> BinaryData;
        /// <summary>
        /// Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.
        /// </summary>
        public readonly ImmutableDictionary<string, string> Data;
        /// <summary>
        /// Immutable, if set to true, ensures that data stored in the ConfigMap cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil.
        /// </summary>
        public readonly bool Immutable;
        /// <summary>
        /// Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
        /// </summary>
        public readonly string Kind;
        /// <summary>
        /// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
        /// </summary>
        public readonly Pulumi.Kubernetes.Types.Outputs.Meta.V1.ObjectMetaPatch Metadata;

        [OutputConstructor]
        private ConfigMapPatch(
            string apiVersion,

            ImmutableDictionary<string, string> binaryData,

            ImmutableDictionary<string, string> data,

            bool immutable,

            string kind,

            Pulumi.Kubernetes.Types.Outputs.Meta.V1.ObjectMetaPatch metadata)
        {
            ApiVersion = apiVersion;
            BinaryData = binaryData;
            Data = data;
            Immutable = immutable;
            Kind = kind;
            Metadata = metadata;
        }
    }
}

repository: pulumi/pulumi-kubernetes

license_type: permissive

repo_name: pulumi/pulumi-kubernetes

branch_name: refs/heads/master

gha_language: Java

extension: cs


text:
namespace RangeExceptions.Exceptions
{
    using System;

    public class InvalidRangeException<T> : ApplicationException where T : struct, IFormattable
    {
        private T rangeStart;
        private T rangeEnd;

        public InvalidRangeException(string message, T start, T end)
            : base(message)
        {
            this.RangeStart = start;
            this.RangeEnd = end;
        }

        public T RangeStart { get; private set; }

        public T RangeEnd { get; private set; }
    }
}

license: MIT


text:
DESCRIPTION = "PyEphem provides scientific-grade astronomical computations \
for the Python programming language. \
Given a date and location on the Earth's surface, it can compute the positions \
of the Sun and Moon, of the planets and their moons, and of any asteroids, \
comets, or earth satellites whose orbital elements the user can provide."
HOMEPAGE = "http://www.rhodesmill.org/brandon/projects/pyephem.html"
LICENSE = "PSF"
AUTHOR = "Brandon Craig Rhodes"
MAINTAINER = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
PR = "ml0"

SRC_URI = "http://www.rhodesmill.org/brandon/projects/pyephem-${PV}.tar.gz"
S = "${WORKDIR}/pyephem-${PV}"

inherit distutils

extension: bb


text:
SUMMARY = "A UNIX tool for secure deletion"
DESCRIPTION = "Wipe is a little command for securely erasing files from \
magnetic media. It compiles under various unix platforms, \
including Linux 2. * , (Open, Net, Free)BSD, aix 4.1, SunOS \
5.5.1, Solaris 2.6. wipe is released under the GPL. Pre-compiled \
packages are available on most Linux distributions. \
Under Debian, the package name is wipe"
HOMEPAGE = "http://lambda-diode.com/software/wipe/"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://GPL;md5=0636e73ff0215e8d672dc4c32c317bb3"

SRC_URI = "git://github.com/berke/wipe.git;branch=master;protocol=https \
    file://support-cross-compile-for-linux.patch \
    file://makefile-add-ldflags.patch \
"
SRCREV = "796b62293e007546e051619bd03f5ba338ef28e5"

S = "${WORKDIR}/git"

EXTRA_OEMAKE = "linux"

do_install() {
    make install DESTDIR=${D}
}

do_configure[noexec] = "1"

repository: openembedded/meta-openembedded

repo_name: openembedded/meta-openembedded

gha_license_id: MIT

gha_language: BitBake


text:
package main

import (
	"bytes"
	"container/list"
	"context"
	"encoding/json"
	"fmt"
	"math"
	"sync"
	"time"

	"github.com/filecoin-project/go-address"
	"github.com/ipfs/go-cid"
	cbg "github.com/whyrusleeping/cbor-gen"

	"github.com/filecoin-project/specs-actors/actors/abi"
	"github.com/filecoin-project/specs-actors/actors/abi/big"
	"github.com/filecoin-project/specs-actors/actors/builtin"
	"github.com/filecoin-project/specs-actors/actors/builtin/miner"
	"github.com/filecoin-project/specs-actors/actors/builtin/power"
	"github.com/filecoin-project/specs-actors/actors/util/adt"

	"github.com/filecoin-project/lotus/api"
	"github.com/filecoin-project/lotus/chain/store"
	"github.com/filecoin-project/lotus/chain/types"
	parmap "github.com/filecoin-project/lotus/lib/parmap"
)

func runSyncer(ctx context.Context, api api.FullNode, st *storage, maxBatch int) {
	notifs, err := api.ChainNotify(ctx)
	if err != nil {
		panic(err)
	}
	go func() {
		for notif := range notifs {
			for _, change := range notif {
				switch change.Type {
				case store.HCCurrent:
					fallthrough
				case store.HCApply:
					syncHead(ctx, api, st, change.Val, maxBatch)
				case store.HCRevert:
					log.Warnf("revert todo")
				}

				if change.Type == store.HCCurrent {
					go subMpool(ctx, api, st)
					go subBlocks(ctx, api, st)
				}
			}
		}
	}()
}

type minerStateInfo struct {
	// common
	addr      address.Address
	act       types.Actor
	stateroot cid.Cid

	// miner specific
	state miner.State
	info  miner.MinerInfo

	// tracked by power actor
	rawPower big.Int
	qalPower big.Int
	ssize    uint64
	psize    uint64
}

type actorInfo struct {
	stateroot cid.Cid
	tsKey     types.TipSetKey
	state     string
}

func syncHead(ctx context.Context, api api.FullNode, st *storage, headTs *types.TipSet, maxBatch int) {
	var alk sync.Mutex

	log.Infof("Getting synced block list")

	hazlist := st.hasList()

	log.Infof("Getting headers / actors")

	// global list of all blocks that need to be synced
	allToSync := map[cid.Cid]*types.BlockHeader{}
	// a stack
	toVisit := list.New()

	for _, header := range headTs.Blocks() {
		toVisit.PushBack(header)
	}

	// TODO consider making a db query to check where syncing left off at in the case of a restart and avoid reprocessing
	// those entries, or write value to file on shutdown
	// walk the entire chain starting from headTS
	for toVisit.Len() > 0 {
		bh := toVisit.Remove(toVisit.Back()).(*types.BlockHeader)
		_, has := hazlist[bh.Cid()]
		if _, seen := allToSync[bh.Cid()]; seen || has {
			continue
		}

		allToSync[bh.Cid()] = bh
		if len(allToSync)%500 == 10 {
			log.Debugf("to visit: (%d) %s @%d", len(allToSync), bh.Cid(), bh.Height)
		}

		if len(bh.Parents) == 0 {
			continue
		}

		pts, err := api.ChainGetTipSet(ctx, types.NewTipSetKey(bh.Parents...))
		if err != nil {
			log.Error(err)
			continue
		}

		for _, header := range pts.Blocks() {
			toVisit.PushBack(header)
		}
	}

	// Main worker loop, this loop runs until all tipse from headTS to genesis have been processed.
	for len(allToSync) > 0 {
		// first map is addresses -> common actors states (head, code, balance, nonce)
		// second map common actor states -> chain state (tipset, stateroot) & unique actor state (deserialization of their head CID) represented as json.
		actors := map[address.Address]map[types.Actor]actorInfo{}

		// map of actor public key address to ID address
		addressToID := map[address.Address]address.Address{}
		minH := abi.ChainEpoch(math.MaxInt64)

		// find the blockheader with the lowest height
		for _, header := range allToSync {
			if header.Height < minH {
				minH = header.Height
			}
		}

		// toSync maps block cids to their headers and contains all block headers that will be synced in this batch
		// `maxBatch` is a tunable parameter to control how many blocks we sync per iteration.
		toSync := map[cid.Cid]*types.BlockHeader{}
		for c, header := range allToSync {
			if header.Height < minH+abi.ChainEpoch(maxBatch) {
				toSync[c] = header
				addressToID[header.Miner] = address.Undef
			}
		}
		// remove everything we are syncing this round from the global list of blocks to sync
		for c := range toSync {
			delete(allToSync, c)
		}

		log.Infow("Starting Sync", "height", minH, "numBlocks", len(toSync), "maxBatch", maxBatch)

		// map of addresses to changed actors
		var changes map[string]types.Actor
		// collect all actor state that has changes between block headers
		paDone := 0
		parmap.Par(50, parmap.MapArr(toSync), func(bh *types.BlockHeader) {
			paDone++
			if paDone%100 == 0 {
				log.Infof("pa: %d %d%%", paDone, (paDone*100)/len(toSync))
			}

			if len(bh.Parents) == 0 { // genesis case
				genesisTs, _ := types.NewTipSet([]*types.BlockHeader{bh})
				aadrs, err := api.StateListActors(ctx, genesisTs.Key())
				if err != nil {
					log.Error(err)
					return
				}

				// TODO suspicious there is not a lot to be gained by doing this in parallel since the genesis state
				// is unlikely to contain a lot of actors, why not for loop here?
				parmap.Par(50, aadrs, func(addr address.Address) {
					act, err := api.StateGetActor(ctx, addr, genesisTs.Key())
					if err != nil {
						log.Error(err)
						return
					}

					ast, err := api.StateReadState(ctx, addr, genesisTs.Key())
					if err != nil {
						log.Error(err)
						return
					}
					state, err := json.Marshal(ast.State)
					if err != nil {
						log.Error(err)
						return
					}

					alk.Lock()
					_, ok := actors[addr]
					if !ok {
						actors[addr] = map[types.Actor]actorInfo{}
					}
					actors[addr][*act] = actorInfo{
						stateroot: bh.ParentStateRoot,
						tsKey:     genesisTs.Key(),
						state:     string(state),
					}
					addressToID[addr] = address.Undef
					alk.Unlock()
				})

				return
			}

			pts, err := api.ChainGetTipSet(ctx, types.NewTipSetKey(bh.Parents...))
			if err != nil {
				log.Error(err)
				return
			}

			// TODO Does this return actors that have been deleted between states?
			// collect all actors that had state changes between the blockheader parent-state and its grandparent-state.
			changes, err = api.StateChangedActors(ctx, pts.ParentState(), bh.ParentStateRoot)
			if err != nil {
				log.Error(err)
				return
			}

			// record the state of all actors that have changed
			for a, act := range changes {
				act := act

				addr, err := address.NewFromString(a)
				if err != nil {
					log.Error(err)
					return
				}

				ast, err := api.StateReadState(ctx, addr, pts.Key())

				if err != nil {
					log.Error(err)
					return
				}

				state, err := json.Marshal(ast.State)
				if err != nil {
					log.Error(err)
					return
				}

				alk.Lock()
				_, ok := actors[addr]
				if !ok {
					actors[addr] = map[types.Actor]actorInfo{}
				}
				// a change occurred for the actor with address `addr` and state `act` at tipset `pts`.
				actors[addr][act] = actorInfo{
					stateroot: bh.ParentStateRoot,
					state:     string(state),
					tsKey:     pts.Key(),
				}
				addressToID[addr] = address.Undef
				alk.Unlock()
			}
		})

		// map of tipset to all miners that had a head-change at that tipset.
		minerTips := make(map[types.TipSetKey][]*minerStateInfo, len(changes))
		// heads we've seen, im being paranoid
		headsSeen := make(map[cid.Cid]struct{}, len(actors))

		log.Infof("Getting messages")

		msgs, incls := fetchMessages(ctx, api, toSync)

		log.Infof("Resolving addresses")

		for _, message := range msgs {
			addressToID[message.To] = address.Undef
			addressToID[message.From] = address.Undef
		}

		parmap.Par(50, parmap.KMapArr(addressToID), func(addr address.Address) {
			// FIXME: cannot use EmptyTSK here since actorID's can change during reorgs, need to use the corresponding tipset.
			// TODO: figure out a way to get the corresponding tipset...
			raddr, err := api.StateLookupID(ctx, addr, types.EmptyTSK)
			if err != nil {
				log.Warn(err)
				return
			}
			alk.Lock()
			addressToID[addr] = raddr
			alk.Unlock()
		})

		log.Infof("Getting miner info")

		minerChanges := 0
		for addr, m := range actors {
			for actor, c := range m {
				if actor.Code != builtin.StorageMinerActorCodeID {
					continue
				}

				// only want miner actors with head change events
				if _, found := headsSeen[actor.Head]; found {
					continue
				}
				minerChanges++

				minerTips[c.tsKey] = append(minerTips[c.tsKey], &minerStateInfo{
					addr:      addr,
					act:       actor,
					stateroot: c.stateroot,

					state: miner.State{},
					info:  miner.MinerInfo{},

					rawPower: big.Zero(),
					qalPower: big.Zero(),
				})

				headsSeen[actor.Head] = struct{}{}
			}
		}

		minerProcessingStartedAt := time.Now()
		log.Infow("Processing miners", "numTips", len(minerTips), "numMinerChanges", minerChanges)
		// extract the power actor state at each tipset, loop over all miners that changed at said tipset and extract their
		// claims from the power actor state. This ensures we only fetch the power actors state once for each tipset.
		parmap.Par(50, parmap.KVMapArr(minerTips), func(it func() (types.TipSetKey, []*minerStateInfo)) {
			tsKey, minerInfo := it()

			// get the power actors claims map
			mp, err := getPowerActorClaimsMap(ctx, api, tsKey)
			if err != nil {
				log.Error(err)
				return
			}
			// Get miner raw and quality power
			for _, mi := range minerInfo {
				var claim power.Claim
				// get miner claim from power actors claim map and store if found, else the miner had no claim at
				// this tipset
				found, err := mp.Get(adt.AddrKey(mi.addr), &claim)
				if err != nil {
					log.Error(err)
				}
				if found {
					mi.qalPower = claim.QualityAdjPower
					mi.rawPower = claim.RawBytePower
				}

				// Get the miner state info
				astb, err := api.ChainReadObj(ctx, mi.act.Head)
				if err != nil {
					log.Error(err)
					return
				}
				if err := mi.state.UnmarshalCBOR(bytes.NewReader(astb)); err != nil {
					log.Error(err)
					return
				}
				mi.info = mi.state.Info
			}

			// TODO Get the Sector Count
			// FIXME this is returning a lot of "address not found" errors, which is strange given that StateChangedActors
			// retruns all actors that had a state change at tipset `k.tsKey`, maybe its returning deleted miners too??
			/*
				sszs, err := api.StateMinerSectorCount(ctx, k.addr, k.tsKey)
				if err != nil {
					info.psize = 0
					info.ssize = 0
				} else {
					info.psize = sszs.Pset
					info.ssize = sszs.Sset
				}
			*/
		})
		log.Infow("Completed Miner Processing", "duration", time.Since(minerProcessingStartedAt).String(), "processed", minerChanges)

		log.Info("Getting receipts")

		receipts := fetchParentReceipts(ctx, api, toSync)

		log.Info("Storing headers")

		if err := st.storeHeaders(toSync, true); err != nil {
			log.Errorf("%+v", err)
			return
		}

		log.Info("Storing address mapping")

		if err := st.storeAddressMap(addressToID); err != nil {
			log.Error(err)
			return
		}

		log.Info("Storing actors")

		if err := st.storeActors(actors); err != nil {
			log.Error(err)
			return
		}

		log.Info("Storing miners")
		if err := st.storeMiners(minerTips); err != nil {
			log.Error(err)
			return
		}

		log.Info("Storing miner sectors")
		sectorStart := time.Now()
		if err := st.storeSectors(minerTips, api); err != nil {
			log.Error(err)
			return
		}
		log.Infow("Finished storing miner sectors", "duration", time.Since(sectorStart).String())

		log.Info("Storing miner sectors heads")
		if err := st.storeMinerSectorsHeads(minerTips, api); err != nil {
			log.Error(err)
			return
		}

		log.Infof("Storing messages")

		if err := st.storeMessages(msgs); err != nil {
			log.Error(err)
			return
		}

		log.Info("Storing message inclusions")

		if err := st.storeMsgInclusions(incls); err != nil {
			log.Error(err)
			return
		}

		log.Infof("Storing parent receipts")

		if err := st.storeReceipts(receipts); err != nil {
			log.Error(err)
			return
		}
		log.Infof("Sync stage done")
	}

	log.Infof("Get deals")

	// TODO: incremental, gather expired
	deals, err := api.StateMarketDeals(ctx, headTs.Key())
	if err != nil {
		log.Error(err)
		return
	}

	log.Infof("Store deals")

	if err := st.storeDeals(deals); err != nil {
		log.Error(err)
		return
	}

	log.Infof("Refresh views")

	if err := st.refreshViews(); err != nil {
		log.Error(err)
		return
	}

	log.Infof("Sync done")
}

func fetchMessages(ctx context.Context, api api.FullNode, toSync map[cid.Cid]*types.BlockHeader) (map[cid.Cid]*types.Message, map[cid.Cid][]cid.Cid) {
	var lk sync.Mutex
	messages := map[cid.Cid]*types.Message{}
	inclusions := map[cid.Cid][]cid.Cid{} // block -> msgs

	parmap.Par(50, parmap.MapArr(toSync), func(header *types.BlockHeader) {
		msgs, err := api.ChainGetBlockMessages(ctx, header.Cid())
		if err != nil {
			log.Error(err)
			return
		}

		vmm := make([]*types.Message, 0, len(msgs.Cids))
		for _, m := range msgs.BlsMessages {
			vmm = append(vmm, m)
		}

		for _, m := range msgs.SecpkMessages {
			vmm = append(vmm, &m.Message)
		}

		lk.Lock()
		for _, message := range vmm {
			messages[message.Cid()] = message
			inclusions[header.Cid()] = append(inclusions[header.Cid()], message.Cid())
		}
		lk.Unlock()
	})

	return messages, inclusions
}

type mrec struct {
	msg   cid.Cid
	state cid.Cid
	idx   int
}

func fetchParentReceipts(ctx context.Context, api api.FullNode, toSync map[cid.Cid]*types.BlockHeader) map[mrec]*types.MessageReceipt {
	var lk sync.Mutex
	out := map[mrec]*types.MessageReceipt{}

	parmap.Par(50, parmap.MapArr(toSync), func(header *types.BlockHeader) {
		recs, err := api.ChainGetParentReceipts(ctx, header.Cid())
		if err != nil {
			log.Error(err)
			return
		}
		msgs, err := api.ChainGetParentMessages(ctx, header.Cid())
		if err != nil {
			log.Error(err)
			return
		}

		lk.Lock()
		for i, r := range recs {
			out[mrec{
				msg:   msgs[i].Cid,
				state: header.ParentStateRoot,
				idx:   i,
			}] = r
		}
		lk.Unlock()
	})

	return out
}

// load the power actor state clam as an adt.Map at the tipset `ts`.
func getPowerActorClaimsMap(ctx context.Context, api api.FullNode, ts types.TipSetKey) (*adt.Map, error) {
	powerActor, err := api.StateGetActor(ctx, builtin.StoragePowerActorAddr, ts)
	if err != nil {
		return nil, err
	}

	powerRaw, err := api.ChainReadObj(ctx, powerActor.Head)
	if err != nil {
		return nil, err
	}

	var powerActorState power.State
	if err := powerActorState.UnmarshalCBOR(bytes.NewReader(powerRaw)); err != nil {
		return nil, fmt.Errorf("failed to unmarshal power actor state: %w", err)
	}

	s := &apiIpldStore{ctx, api}
	return adt.AsMap(s, powerActorState.Claims)
}

// require for AMT and HAMT access
// TODO extract this to a common location in lotus and reuse the code
type apiIpldStore struct {
	ctx context.Context
	api api.FullNode
}

func (ht *apiIpldStore) Context() context.Context {
	return ht.ctx
}

func (ht *apiIpldStore) Get(ctx context.Context, c cid.Cid, out interface{}) error {
	raw, err := ht.api.ChainReadObj(ctx, c)
	if err != nil {
		return err
	}

	cu, ok := out.(cbg.CBORUnmarshaler)
	if ok {
		if err := cu.UnmarshalCBOR(bytes.NewReader(raw)); err != nil {
			return err
		}
		return nil
	}
	return fmt.Errorf("Object does not implement CBORUnmarshaler: %T", out)
}

func (ht *apiIpldStore) Put(ctx context.Context, v interface{}) (cid.Cid, error) {
	return cid.Undef, fmt.Errorf("Put is not implemented on apiIpldStore")
}

repository: nathansenn/lotus

repo_name: nathansenn/lotus

gha_license_id: NOASSERTION

extension: go


text:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { MarkdownRenderer } from './markdown.component';
import { CodeHighlighter } from './highlight/highlight.component';
import { InlineComponent } from './inline/inline.component';

@NgModule({
  imports: [
    CommonModule,
    RouterModule
  ],
  declarations: [
    MarkdownRenderer,
    CodeHighlighter,
    InlineComponent
  ],
  exports: [
    MarkdownRenderer
  ]
})
export class MarkdownModule { }

repository: edicon/wizdm

repo_name: edicon/wizdm

extension: ts


text:
package main

import (
	"fmt"
	"io/ioutil"
	"os"

	"encoding/json"
	"github.com/graphql-go/graphql"
	"github.com/sirupsen/logrus"
	"github.com/spf13/cobra"
	"crypto/sha256"
)

func main() {
	var rootCmd = &cobra.Command{
		Short: "json filter",
		Long:  `jf is a tool to pull out a subset of a json document in a standard, hashable way.`,
		Use:   "jf [flags] [file] [-]",
		DisableFlagsInUseLine: true,

		PreRunE: func(cmd *cobra.Command, args []string) error {
			if debug, _ := cmd.Flags().GetBool("debug"); debug {
				logrus.SetLevel(logrus.DebugLevel)
			}
			return nil
		},

		RunE: runCmdFunc,
	}

	rootCmd.Flags().Bool("debug", false, "enable debug logging")
	rootCmd.Flags().StringP("query", "q", "", "query string in graphql format")
	rootCmd.Flags().StringP("file", "f", "", "file containing query string in graphql format")
	rootCmd.Flags().BoolP("hash", "x", false, "output sha256 instead of filtered content")
	//rootCmd.Flags().BoolP("pretty-output", "p", true, "pretty-printed output")

	rootCmd.Flags().MarkHidden("debug")

	rootCmd.Execute()
}

func runCmdFunc(cmd *cobra.Command, args []string) error {
	query, _ := cmd.Flags().GetString("query")
	if query == "" {
		queryFile, _ := cmd.Flags().GetString("file")
		queryBytes, err := ioutil.ReadFile(queryFile)
		if err != nil {
			return fmt.Errorf("failed to read file at %s: `%s`", queryFile, err)
		}
		query = string(queryBytes)
	}

	path := os.ExpandEnv(args[0])
	if path == "-" {
		path="/dev/stdin"
	}
	fileBytes, err := ioutil.ReadFile(path)
	if err != nil {
		return fmt.Errorf("failed to read file at %s: `%s`", path, err)
	}
	shouldHash, _ := cmd.Flags().GetBool("hash")
	if shouldHash {
		fmt.Printf("%x", Sha256Json(query, json.RawMessage(fileBytes)))
	} else {
		fmt.Print(string(FilterJson(query, json.RawMessage(fileBytes))))
	}
	return nil
}

func Sha256Json(query string, rawJson json.RawMessage) [sha256.Size]byte {
	return sha256.Sum256([]byte(FilterJson(query, rawJson)))
}

func FilterJson(query string, rawJson json.RawMessage) json.RawMessage {
	schema, err := QueryableSchemaFromJson(rawJson)
	if err != nil {
		logrus.Fatalf("failed to create new schema, error: %v", err)
	}

	params := graphql.Params{Schema: *schema, RequestString: query}
	r := graphql.Do(params)
	if len(r.Errors) > 0 {
		logrus.Fatalf("failed to execute graphql operation, errors: %+v", r.Errors)
	}

	rJSON, _ := json.Marshal(r.Data)
	return rJSON
}

func QueryableSchemaFromJson(rawJson json.RawMessage) (*graphql.Schema, error) {
	parsed := map[string]interface{}{}
	if err := json.Unmarshal(rawJson, &parsed); err != nil {
		return nil, err
	}
	schemaConfig := graphql.SchemaConfig{Query: ObjectFor("root", parsed)}
	scheme, err := graphql.NewSchema(schemaConfig)
	return &scheme, err
}

func ObjectFor(name string, parsed map[string]interface{}) *graphql.Object {
	fields := graphql.Fields{}
	for key, value := range parsed {
		logrus.Debugf("field %s, %#v, %T", key, value, value)
		fieldType := FieldTypeForField(key, value)
		fieldResolver := ResolverForField(key, value)
		if fieldType != nil {
			fields[key] = &graphql.Field{
				Type:    fieldType,
				Resolve: fieldResolver,
			}
		}
	}
	return graphql.NewObject(graphql.ObjectConfig{Name: name, Fields: fields})
}

func FieldTypeForField(name string, value interface{}) graphql.Output {
	switch value.(type) {
	case string:
		return graphql.String
	case float64:
		return graphql.Float
	case bool:
		return graphql.Boolean
	case []interface{}:
		list := value.([]interface{})
		if len(list) > 0 {
			return graphql.NewList(FieldTypeForField(name, list[0]))
		}
	case map[string]interface{}:
		return ObjectFor(name, value.(map[string]interface{}))
	}
	return nil
}

func ResolverForField(name string, value interface{}) graphql.FieldResolveFn {
	switch value.(type) {
	case []interface{}:
		list := value.([]interface{})
		return func(p graphql.ResolveParams) (interface{}, error) {
			vals := []interface{}{}
			for _, obj := range list {
				resolver := ResolverForField(name, obj)
				val, err := resolver(p)
				if err != nil {
					return nil, err
				}
				vals = append(vals, val)
			}
			return vals, nil
		}
	}
	return func(p graphql.ResolveParams) (interface{}, error) {
		return value, nil
	}
}

repository: esperyong/jf

repo_name: esperyong/jf


text:
package event

import "github.com/romshark/messenger-sim/messenger/eventlog"

type UserLeftConversation struct {
	User         UserID
	Conversation ConversationID
}

// Copy creates a deep copy
func (e *UserLeftConversation) Copy() eventlog.Payload {
	cp := *e
	return &cp
}

repository: romshark/messenger-sim

repo_name: romshark/messenger-sim


text:
ExternalProject_Add(gflags
    URL ${gflags_url}
    URL_MD5 ${gflags_md5}
    DOWNLOAD_NAME ${gflags_dlname}
    ${COMMON_EP_ARGS}
    ${COMMON_CMAKE_EP_ARGS}
    CMAKE_ARGS
        ${COMMON_CMAKE_ARGS}
    )

extract_license(gflags
    COPYING.txt
)

repository: Sreevis/drake

repo_name: Sreevis/drake

extension: cmake


text:
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.ValueGeneration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace hsm_api.Infrastructure.ValueGenerators
{
    /// <summary>
    /// Property with this value generator attached will check if <see cref="ConditionFulfillmentValueGenerator.IsFulfilledCondition(T)"/> is true. <para />
    /// In case it is <see cref="ConditionFulfillmentValueGenerator.GetNewValue(EntityEntry)"/> is called to generate new value. <br/>
    /// In case it isn't the current value of the property is returned.
    /// </summary>
    /// <typeparam name="T">Type of value to generate</typeparam>
    abstract public class ConditionFulfillmentValueGenerator<T> : ValueGenerator<T>
    {
        protected abstract string PropertyName { get; }

        public override bool GeneratesTemporaryValues => false;

        public override T Next(EntityEntry entry)
        {
            T propertyValue = (T)entry.Property(PropertyName).OriginalValue;
            if (IsFulfilledCondition(propertyValue))
                return GetNewValue(entry);
            else
                return propertyValue;
        }

        protected abstract bool IsFulfilledCondition(T propertyValue);

        protected abstract T GetNewValue(EntityEntry entry);
    }
}

repository: FirsovG/hsm-api

repo_name: FirsovG/hsm-api

branch_name: refs/heads/main


text:
SUMMARY = "A configurable sidebar-enabled Sphinx theme"
HOMEPAGE = "https://pypi.python.org/pypi/alabaster/"

SECTION = "devel/python"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=91a0fdc82c1f9cb0689e845487137a2f"

SRCNAME = "alabaster"
SRC_URI = "git://github.com/bitprophet/alabaster;protocol=https"
SRCREV = "1c3393da3a99eb0ef3792b922866daf5559bcbf9"

S = "${WORKDIR}/git"

inherit setuptools

CLEANBROKEN = "1"
BBCLASSEXTEND = "native"

repository: billyjbryant/ops-build

repo_name: billyjbryant/ops-build

gha_language: Python


text:
parseGlobalSections(pre post Override2)
testGlobalSection(pre TestSec Key2=Value2 Key3=Value3)
testGlobalSection(post ExtensibilityGlobals "SolutionGuid={00000000-0000-0000-0000-000000000000}")
testGlobalSection(post ExtensibilityAddIns Key1=Value1)


text:
require xorg-app-common.inc

SUMMARY = "Runtime configuration and test of XInput devices"

DESCRIPTION = "Xinput is an utility for configuring and testing XInput devices"

LIC_FILES_CHKSUM = "file://COPYING;md5=22c34ea36136407a77702a8b784f9bd0"

DEPENDS += " libxi"

PR = "${INC_PR}.7"

SRC_URI[md5sum] = "1e2f0ad4f3fa833b65c568907f171d28"
SRC_URI[sha256sum] = "6aade131cecddaeefc39ddce1dd5e8473f6039c2e4efbfd9fbb5ee2a75885c76"


text:
/*
Copyright 2019 The Knative Authors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package tracing

import (
	"encoding/json"
	"fmt"
	"sort"
	"testing"

	"github.com/openzipkin/zipkin-go/model"
	"k8s.io/apimachinery/pkg/util/sets"
)

// PrettyPrintTrace pretty prints a Trace.
func PrettyPrintTrace(trace []model.SpanModel) string {
	b, _ := json.Marshal(trace)
	return string(b)
}

// SpanTree is the tree of Spans representation of a Trace.
type SpanTree struct {
	Root     bool
	Span     model.SpanModel
	Children []SpanTree
}

func (t SpanTree) String() string {
	b, _ := json.Marshal(t)
	return string(b)
}

func (t SpanTree) ToTestSpanTree() TestSpanTree {
	children := make([]TestSpanTree, len(t.Children))
	for i := range t.Children {
		children[i] = t.Children[i].toTestSpanTreeHelper()
	}
	return TestSpanTree{
		Root:     t.Root,
		Children: children,
	}
}

func (t SpanTree) toTestSpanTreeHelper() TestSpanTree {
	name := ""
	if t.Span.LocalEndpoint != nil {
		name = t.Span.LocalEndpoint.ServiceName
	}
	children := make([]TestSpanTree, len(t.Children))
	for i := range t.Children {
		children[i] = t.Children[i].toTestSpanTreeHelper()
	}
	tst := TestSpanTree{
		Kind:                     t.Span.Kind,
		LocalEndpointServiceName: name,
		Tags:                     t.Span.Tags,
		Children:                 children,
	}
	tst.SortChildren()
	return tst
}

// TestSpanTree is the expected version of SpanTree used for assertions in testing.
//
// The JSON names of the fields are weird because we want a specific order when pretty printing
// JSON. The JSON will be printed in alphabetical order, so we are imposing a certain order by
// prefixing the keys with a specific letter. The letter has no mean other than ordering.
type TestSpanTree struct {
	Note                     string            `json:"a_Note,omitempty"`
	Root                     bool              `json:"b_Root,omitempty"`
	Kind                     model.Kind        `json:"c_Kind,omitempty"`
	LocalEndpointServiceName string            `json:"d_Name,omitempty"`
	Tags                     map[string]string `json:"e_Tags,omitempty"`

	Children []TestSpanTree `json:"z_Children,omitempty"`
}

func (t TestSpanTree) String() string {
	b, _ := json.Marshal(t)
	return string(b)
}

// SortChildren attempts to sort the children of this TestSpanTree. The children are siblings, order
// does not actually matter. TestSpanTree.Matches() correctly handles this, by matching in any
// order. SortChildren() is most useful before JSON pretty printing the structure and comparing
// manually.
//
// The order it uses:
//   1. Shorter children first.
//   2. Span kind.
//   3. "http.url", "http.host", "http.path" tag presence and values.
// If all of those are equal, then arbitrarily choose the earlier index.
func (t *TestSpanTree) SortChildren() {
	for _, child := range t.Children {
		child.SortChildren()
	}
	sort.Slice(t.Children, func(i, j int) bool {
		ic := t.Children[i]
		jc := t.Children[j]

		if ic.height() != jc.height() {
			return ic.height() < jc.height()
		}

		if ic.Kind != jc.Kind {
			return ic.Kind < jc.Kind
		}
		it := ic.Tags
		jt := jc.Tags
		for _, key := range []string{"http.url", "http.host", "http.path"} {
			if it[key] != jt[key] {
				return it[key] < jt[key]
			}
		}
		// We don't have anything to reliably differentiate by. So this isn't going to really be
		// sorted, just leave the existing one first arbitrarily.
		return i < j
	})
}

func (t TestSpanTree) height() int {
	height := 0
	for _, child := range t.Children {
		if ch := child.height(); ch >= height {
			height = ch + 1
		}
	}
	return height
}

// GetTraceTree converts a set slice of spans into a SpanTree.
func GetTraceTree(t *testing.T, trace []model.SpanModel) SpanTree {
	var roots []model.SpanModel
	parents := map[model.ID][]model.SpanModel{}
	for _, span := range trace {
		if span.ParentID != nil {
			parents[*span.ParentID] = append(parents[*span.ParentID], span)
		} else {
			roots = append(roots, span)
		}
	}

	children, err := getChildren(parents, roots)
	if err != nil {
		t.Fatalf("Could not create span tree for %v: %v", PrettyPrintTrace(trace), err)
	}

	tree := SpanTree{
		Root:     true,
		Children: children,
	}
	if len(parents) != 0 {
		t.Fatalf("Left over spans after generating the SpanTree: %v. Original: %v", parents, PrettyPrintTrace(trace))
	}
	return tree
}

func getChildren(parents map[model.ID][]model.SpanModel, current []model.SpanModel) ([]SpanTree, error) {
	var children []SpanTree
	for _, span := range current {
		grandchildren, err := getChildren(parents, parents[span.ID])
		if err != nil {
			return children, err
		}
		children = append(children, SpanTree{
			Span:     span,
			Children: grandchildren,
		})
		delete(parents, span.ID)
	}

	return children, nil
}

// SpanCount gets the count of spans in this tree.
func (t TestSpanTree) SpanCount() int {
	spans := 1
	if t.Root {
		// The root span is artificial. It exits solely so we can easily pass around the tree.
		spans = 0
	}
	for _, child := range t.Children {
		spans += child.SpanCount()
	}
	return spans
}

// Matches checks to see if this TestSpanTree matches an actual SpanTree. It is intended to be used
// for assertions while testing.
func (t TestSpanTree) Matches(actual SpanTree) error {
	if g, w := actual.ToTestSpanTree().SpanCount(), t.SpanCount(); g != w {
		return fmt.Errorf("unexpected number of spans. got %d want %d", g, w)
	}
	t.SortChildren()
	if err := traceTreeMatches(".", t, actual); err != nil {
		return fmt.Errorf("spanTree did not match: %v. \n*****Actual***** %v\n*****Expected***** %v", err, actual.ToTestSpanTree().String(), t.String())
	}
	return nil
}

func traceTreeMatches(pos string, want TestSpanTree, got SpanTree) error {
	if g, w := got.Span.Kind, want.Kind; g != w {
		return fmt.Errorf("unexpected kind at %q: got %q, want %q", pos, g, w)
	}
	gotLocalEndpointServiceName := ""
	if got.Span.LocalEndpoint != nil {
		gotLocalEndpointServiceName = got.Span.LocalEndpoint.ServiceName
	}
	if w := want.LocalEndpointServiceName; w != "" && gotLocalEndpointServiceName != w {
		return fmt.Errorf("unexpected localEndpoint.ServiceName at %q: got %q, want %q", pos, gotLocalEndpointServiceName, w)
	}
	for k, w := range want.Tags {
		if g := got.Span.Tags[k]; g != w {
			return fmt.Errorf("unexpected tag[%s] value at %q: got %q, want %q", k, pos, g, w)
		}
	}
	return unorderedTraceTreesMatch(pos, want.Children, got.Children)
}

// unorderedTraceTreesMatch checks to see if for every TestSpanTree in want, there is a
// corresponding SpanTree in got. It's comparison is done unordered, but slowly. It should not be
// called with too many entries in either slice.
func unorderedTraceTreesMatch(pos string, want []TestSpanTree, got []SpanTree) error {
	if g, w := len(got), len(want); g != w {
		return fmt.Errorf("unexpected number of children at %q: got %v, want %v", pos, g, w)
	}
	unmatchedGot := sets.NewInt()
	for i := range got {
		unmatchedGot.Insert(i)
	}
	// This is an O(n^4) algorithm. It compares every item in want to every item in got, O(n^2).
	// Those comparisons do the same recursively O(n^2). We expect there to be not too many traces,
	// so n should be small (say 50 in the largest cases).
OuterLoop:
	for i, w := range want {
		var lastErr error
		for ug := range unmatchedGot {
			lastErr = w.Matches(got[ug])
			// If there is no error, then it matched successfully.
			if lastErr == nil {
				unmatchedGot.Delete(ug)
				continue OuterLoop
			}
		}
		// Nothing matched.
		return fmt.Errorf("unable to find child match %s[%d]: Last Err %v. Want: %s **** Got: %s", pos, i, lastErr, w.String(), got)
	}
	// Everything matched.
	return nil
}

repository: kunal-kushwaha/eventing

repo_name: kunal-kushwaha/eventing